async
ne permettra pas le test suivant pour démarrer jusqu'à ce que l' async
finitions de toutes ses tâches. Ce async
n'est envelopper le rappel dans une Zone, où toutes les tâches asynchrones (par exemple, setTimeout
) sont suivis. Une fois que toutes les tâches asynchrones sont complètes, puis l' async
complète.
Si vous avez jamais travaillé avec de Jasmin à l'extérieur hors Angulaire, vous pouvez avoir vu done
d'être passé à la fonction de rappel
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
Ici, c'est le natif de Jasmin, où nous raconter Jasmin que ce test devrait retarder l'achèvement jusqu'à ce que nous appelons done()
. Si nous n'avons pas d'appel done()
et au lieu de cela fait cela:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
Le test complet avant même l'attente, parce que la promesse se résout après le test est fini de l'exécution de la machine synchrone tâches.
Angulaire (dans un Jasmin de l'environnement), Angulaire sera fait appel done
derrière les coulisses lorsque nous utilisons async
. Il va garder la trace de toutes les tâches asynchrones dans la Zone, et quand ils sont tous finis, done
sera appelé en coulisses.
Dans votre cas particulier, avec l' TestBed
de configuration, vous pouvez utiliser cette généralement lorsque vous souhaitez compileComponents
. J'ai rarement dans une situation où je dois l'appeler autrement
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
Lors du test d'un composant qui utilise templateUrl
(si vous n'êtes pas à l'aide de webpack), puis Angulaire besoin de faire une demande XHR pour obtenir le modèle, de sorte que la compilation de la composante serait asynchrone. Donc, nous devrions attendre jusqu'à ce qu'il décide, avant de poursuivre les tests.