asyncnon consentirà l'avvio del test successivo fino al asynctermine di tutte le sue attività. Quello che asyncfa è avvolgere il callback in una zona, dove setTimeoutvengono tracciate tutte le attività asincrone (ad esempio ). Una volta completate tutte le attività asincrone, il file viene asynccompletato.
Se hai mai lavorato con Jasmine al di fuori di Angular, potresti aver visto doneessere passato al callback
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
Qui, questo è il nativo Jasmine, dove diciamo a Jasmine che questo test dovrebbe ritardare il completamento fino a quando non chiameremo done(). Se non abbiamo chiamato done()e invece abbiamo fatto questo:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
Il test verrebbe completato anche prima dell'aspettativa, perché la promessa si risolve dopo che il test è terminato eseguendo le attività sincrone.
Con Angular (in un ambiente Jasmine), Angular chiamerà effettivamente donedietro le quinte quando usiamo async. Manterrà traccia di tutte le attività asincrone nella zona e, quando saranno terminate, doneverrà richiamato dietro le quinte.
Nel tuo caso particolare con la TestBedconfigurazione, lo useresti generalmente quando vuoi compileComponents. Raramente mi imbatto in una situazione in cui dovrei chiamarla altrimenti
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
Quando si prova un componente che utilizza templateUrl(se non si utilizza webpack), Angular deve effettuare una richiesta XHR per ottenere il modello, quindi la compilazione del componente sarebbe asincrona. Quindi dovremmo aspettare fino a quando non si risolve prima di continuare i test.
asyncnon è necessario. Quando lo usitemplateUrl, lo è. Tuttavia, l'inclusioneasyncnon "interromperà" un componente del modello inline. Pensi che sia sicuro dire che si può semplicemente usareasyncper impostazione predefinita per ogni test?