Je trouve toujours les cas de test Jest-Enzyme commençant par un global beforeEach
qui ressemble à ce qui suit:
describe('TEST BLOCK' () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<Component />);
));
));
La fonction dans le global beforeEach
s'exécute avant chaque test dans le TEST BLOCK
describe
bloc. Dans ce cas, il rend le Component
et l'affecte à wrapper
avant d'exécuter chaque test. Je ne sais pas très bien pourquoi faisons-nous cela en premier lieu. Ne ralentissons-nous pas délibérément la durée du test? N'est-il pas correct de le rendre une fois et de l'affecter à wrapper
? Quel est le but du beforeEach
ici? Y a-t-il d'autres scénarios où beforeEach
est bénéfique lors du test des composants React?
Si vous avez du code commun à plusieurs tests, vous pouvez utiliser beforeEach
pour effectuer une configuration avant l'exécution de chaque test afin d'éviter la répétition. Dans ce cas, si vous avez plusieurs tests qui montent peu profond Component
, vous pouvez déplacer le montage peu profond vers beforeEach
, et le composant sera monté lors de chaque test. En général, vous souhaiterez associer cela à un afterEach
, où vous appelez wrapper.unmount()
.
describe('tests', () => {
it('does one thing', () => {
const wrapper = shallow(<Component />);
// ...test some things
wrapper.unmount();
});
it('does another thing', () => {
const wrapper = shallow(<Component />);
// ...test something else
wrapper.unmount();
});
it('does a third thing', () => {
const wrapper = shallow(<Component />);
// ...test a third thing
wrapper.unmount();
});
});
devient:
describe('tests', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<Component />);
});
afterEach(() => {
wrapper.unmount();
});
it('does something', () => {
// ...test something
});
it('does something else', () => {
// ...test something else
});
it('does another thing', () => {
// ...test a third something
});
});
beforeEach
est appelée la phase de "configuration" et afterEach
la phase de "démontage".
Ne ralentissons-nous pas délibérément le temps d'exécution du test?
Non, car vous devrez de toute façon monter le composant dans chaque test.
N'est-il pas acceptable de le rendre une fois et de l’affecter au wrapper?
La persistance d'un composant (ou de n'importe quel état) sur plusieurs tests peut provoquer des tests irréguliers, car (par exemple) vous pouvez obtenir un résultat différent si les tests sont exécutés dans un ordre différent. Tout état (tel qu'un composant monté) doit être configuré avant chaque test et détruit après chaque test. Cela rend vos tests complètement indépendants les uns des autres.
La documentation Jest recommande beforeEach
pour les tests qui consomment un état global particulier pour chaque test, par exemple, la réinitialisation des données de test dans une base de données avant chaque test. exécutez .
Notez le cas suivant:
Si beforeEach se trouve dans un bloc de description, il s'exécute pour chaque test du bloc de description.
En utilisant le même exemple où nous avons une base de données avec des données de test, si vos tests n'ont pas besoin de réinitialiser les données de test pour chaque test, vous pouvez utiliser beforeAll
pour exécuter du code une fois , avant l'exécution des tests.