asyncnão permitirá que o próximo teste seja iniciado até que asyncconclua todas as suas tarefas. O que asyncfaz é envolver o retorno de chamada em uma Zona, onde todas as tarefas assíncronas (por exemplo setTimeout) são rastreadas. Assim que todas as tarefas assíncronas forem concluídas, o é asyncconcluído.
Se você já trabalhou com Jasmine fora do Angular, pode ter visto donesendo passado para o callback
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
Aqui, é Jasmine nativo, onde dizemos a Jasmine que esse teste deve atrasar a conclusão até que ligemos done(). Se não ligássemos done()e em vez disso fizéssemos:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
O teste seria concluído antes mesmo da expectativa, porque a promessa é resolvida depois que o teste termina de executar as tarefas síncronas.
Com o Angular (em um ambiente Jasmine), o Angular realmente fará chamadas donenos bastidores quando usarmos async. Ele manterá o controle de todas as tarefas assíncronas na Zona e, quando todas forem concluídas, doneserá chamado nos bastidores.
Em seu caso particular com a TestBedconfiguração, você a usaria geralmente quando quiser compileComponents. Eu raramente me deparo com uma situação em que eu teria que chamar de outra forma
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
Ao testar um componente que usa templateUrl(se você não estiver usando webpack), o Angular precisa fazer uma solicitação XHR para obter o modelo, de forma que a compilação do componente seja assíncrona. Portanto, devemos esperar até que seja resolvido antes de continuar o teste.
asyncnão é necessário. Quando você está usandotemplateUrl, é. No entanto, incluirasyncnão "quebrará" um componente de modelo embutido. Você acha que é seguro dizer que pode-se usar como padrãoasyncpara todos os testes?