Simulation d’autres composants
Objectifs de formation
Une fois cette unité terminée, vous pourrez :
- Décrire les stubs fournis par le package sfdx-lwc-jest
- Comprendre comment remplacer la configuration Jest
- Tester les composants en dehors de votre environnement de développement
- Créer des stubs pour les composants externes
Création de composants de base fictifs
Le package sfdx-lwc-jest nous permet d’exécuter Jest dans les composants Web Lightning. Il met en place toutes les configurations Jest nécessaires pour exécuter des tests sans aucune modification supplémentaire. Nous l’avons beaucoup utilisé dans les modules précédents. Ce package comprend un ensemble de stubs (programmes qui simulent les composants dont dépend un module faisant l’objet de tests) pour tous les composants de l’espace de noms Lightning, y compris tous les composants de base Lightning. Cela nous permet d’exécuter les tests dans notre environnement sans être dans un environnement Lightning. Les stubs sont installés dans le répertoire src/lightning-stubs du répertoire node-modules/@salesforce/sfdx-lwc-jest.

Il peut arriver que vous deviez remplacer les stubs fournis par défaut. Pour ce faire, il est nécessaire de remplacer les configurations Jest, puis de créer des stubs personnalisés. Passons en revue les étapes à suivre pour lightning-button.
Commencez par configurer les répertoires pour les stubs personnalisés dans Visual Studio Code.
- Cliquez avec le bouton droit de la souris sur le répertoire
force-appet sélectionnez New Folder (Nouveau dossier).
- Saisissez
testpour nommer le nouveau répertoire.
- Cliquez avec le bouton droit de la souris sur le nouveau répertoire
testet sélectionnez New Folder (Nouveau dossier).
- Saisissez
jest-mockspour nommer le nouveau répertoire.
- Cliquez avec le bouton droit de la souris sur le nouveau répertoire
jest-mockset sélectionnez New Folder (Nouveau dossier).
- Saisissez
lightningpour nommer le nouveau répertoire.
Il s’agit de la racine des stubs pour les composants de base Lightning.
Ensuite, remplacez la configuration Jest en mettant à jour le fichier nommé jest.config.js situé à la racine de votre projet Salesforce DX.
- Ouvrez le fichier
jest.config.js.
- Saisissez le bloc de code suivant après la ligne
…jestConfig,:Prêtez attention à l’élémentmoduleNameMapper: { '^lightning/button$': '<rootDir>/force-app/test/jest-mocks/lightning/button' },moduleNameMapper. Cet élément indique à Jest où trouver le stub correspondant àlightning-button. Le premier tiret est converti en une barre oblique et le reste du nom passe d’une convention où les mots sont séparés par des tirets à une casse mixte. Une barre oblique est utilisée, car le résolveur de module traite tout ce qui se trouve avant le premier tiret comme l’espace de noms. Ici,<rootDir>correspond à la racine de l’espace de travail Salesforce DX.
Votre fichier doit se présenter comme suit :const { jestConfig } = require('@salesforce/sfdx-lwc-jest/config'); module.exports = { ...jestConfig, moduleNameMapper: { '^lightning/button$': ' /force-app/test/jest-mocks/lightning/button' }, modulePathIgnorePatterns: ['/.localdevserver'] }; - Enregistrez le fichier.
Ajoutons maintenant le stub button au répertoire lightning que nous venons de créer.
- Cliquez avec le bouton droit de la souris sur le répertoire
lightningque nous avons créé au cours des dernières étapes et sélectionnez New File (Nouveau fichier).
- Saisissez
button.htmlpour nommer le nouveau fichier.
- Saisissez le bloc de code suivant dans le nouveau fichier :
<template></template>
- Enregistrez le fichier.
- Cliquez avec le bouton droit de la souris sur le répertoire
lightninget sélectionnez New File (Nouveau fichier).
- Saisissez
button.jspour nommer le nouveau fichier.
- Saisissez le bloc de code suivant dans le nouveau fichier :
import { LightningElement, api } from 'lwc'; export default class Button extends LightningElement { @api disabled; @api iconName; @api iconPosition; @api label; @api name; @api type; @api value; @api variant; } - Enregistrez le fichier.
Ces deux fichiers sont des copies des fichiers lightning-button du dossier lightning-stubs. Ils permettent de remplacer l’élément lightning-button de base pour les tests Jest si nécessaire.
Nous pouvons maintenant remplacer les stubs par défaut fournis par sfdx-lwc-jest. Qu’en est-il des composants issus d’autres espaces de noms ? Nous pouvons traiter ces cas avec quelques ajustements seulement. Abordons-les maintenant.
Création d’autres composants fictifs
Commençons par créer des composants fictifs avec un espace de noms différent. Pour ce faire, vous devez configurer un composant Web Lightning avec un test Jest qui échoue. Nous simulerons ensuite un correctif.
- Créez un composant Web Lightning dans Visual Studio Code.
- Définissez le nom sur
otherComponents.
Ajoutons maintenant un composant avec un espace de noms différent au LWC.
- Ouvrez le fichier
otherComponents.htmlet ajoutez le code suivant entre les balises « template » :<thunder-hammer-button onclick={makeNoise}></thunder-hammer-button> - Enregistrez le fichier et exécutez le test.
- Le test échoue pour une nouvelle raison :
Test suite failed to run Cannot find module 'thunder/hammerButton' from 'otherComponents.html'
puisque le composant <thunder-hammer-button> provient d’un autre espace de noms, et non du répertoire lwc local, vous devez créer un stub et mettre à jour la configuration Jest pour mapper le nom de ces composants au fichier fictif.
Vous devez d’abord ajouter un répertoire Thunder pour représenter l’espace de noms. Vous ajoutez ensuite les fichiers pour le remplacer.
- Cliquez avec le bouton droit de la souris sur le répertoire
jest-mocksdans le répertoireforce-app/test/et sélectionnez New Folder (Nouveau dossier).
- Saisissez
thunderpour nommer le nouveau répertoire.
- Cliquez avec le bouton droit de la souris sur le répertoire
thunderet sélectionnez New File (Nouveau fichier).
- Saisissez
hammerButton.htmlpour nommer le nouveau fichier.
- Saisissez le bloc de code suivant dans le nouveau fichier :
<template></template>
- Enregistrez le fichier.
- Cliquez avec le bouton droit de la souris sur le nouveau répertoire
thunderet sélectionnez New File (Nouveau fichier).
- Saisissez
hammerButton.jspour nommer le nouveau fichier.
- Saisissez le bloc de code suivant dans le nouveau fichier :
import { LightningElement, api } from 'lwc'; export default class HammerButton extends LightningElement { @api label; // any other implementation you may want to expose here } - Enregistrez le fichier et exécutez le test.
- Le test échoue. Nous devons mettre à jour le fichier de configuration Jest.
- Ouvrez
jest.config.jset ajoutez cette ligne juste en dessous de la lignemoduleNameMapper: {:'^thunder/hammerButton$': '<rootDir>/force-app/test/jest-mocks/thunder/hammerButton',
- Enregistrez le fichier et exécutez le test.
- Impeccable ! Le test réussit.
Il arrive que le LWC avec lequel vous travaillez importe un autre LWC qui ne se trouve pas dans le répertoire LWC local de votre projet Salesforce DX, Sans stub, ils feront échouer Jest. Testons ce cas.
- Ouvrez le fichier
otherComponents.htmlet ajoutez le code suivant après la première balise « template » :<c-display-panel errors={error} notes={messages}></c-display-panel> - Enregistrez le fichier et exécutez le test.
- Le test échoue, car il ne trouve pas le composant.
Vous pouvez résoudre ce problème à l’aide d’un stub. Vous devez commencer par créer le stub, puis mettre à jour la configuration Jest.
- Cliquez avec le bouton droit de la souris sur le répertoire
jest-mocksdans le répertoireforce-app/test/et sélectionnez New Folder (Nouveau dossier).
- Saisissez
cpour nommer le nouveau répertoire.
- Cliquez avec le bouton droit de la souris sur le répertoire
cet sélectionnez New File (Nouveau fichier).
- Saisissez
displayPanel.htmlpour nommer le nouveau fichier.
- Saisissez le bloc de code suivant dans le nouveau fichier :
<template></template>
- Enregistrez le fichier.
- Cliquez avec le bouton droit de la souris sur le nouveau répertoire
cet sélectionnez New File (Nouveau fichier).
- Saisissez
displayPanel.jspour nommer le nouveau fichier.
- Saisissez le bloc de code suivant dans le nouveau fichier :Notez qu’il existe un décorateur d’API pour chaque paramètre transmis à l’appel de composant.
import { LightningElement, api } from 'lwc'; export default class DisplayPanel extends LightningElement { @api errors; @api notes; // any other implementation you may want to expose here }
- Enregistrez le fichier.
- Ouvrez
jest.config.jset ajoutez cette ligne juste en dessous de la lignemoduleNameMapper: {:'^c/displayPanel$': '<rootDir>/force-app/test/jest-mocks/c/displayPanel',
- Enregistrez le fichier et exécutez le test.
- Le test réussit.
Bravo ! Vous êtes maintenant prêt à écrire des tests pour tous vos composants Web Lightning. Vous êtes également capable de réaliser des implémentations de stubs aussi sophistiquées ou simples que vous le souhaitez.
Ressources
- Site externe : GitHub : salesforce/sfdx-lwc-jest : résolution des composants Web Lightning externes
- Site externe : GitHub : trailheadapps/lwc-recipes