asynctidak akan mengizinkan pengujian berikutnya untuk memulai hingga asyncmenyelesaikan semua tugasnya. Apa yang asyncdilakukan adalah membungkus callback dalam Zona, di mana semua tugas asinkron (misalnya setTimeout) dilacak. Setelah semua tugas asinkron selesai, maka asyncselesai.
Jika Anda pernah bekerja dengan Jasmine di luar Angular, Anda mungkin pernah melihat donediteruskan ke panggilan balik
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
Di sini, ini Jasmine asli, di mana kami memberi tahu Jasmine bahwa tes ini harus menunda penyelesaian sampai kami menelepon done(). Jika kami tidak menelepon done()dan malah melakukan ini:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
Pengujian akan selesai bahkan sebelum ekspektasi, karena promise diselesaikan setelah pengujian selesai menjalankan tugas sinkron.
Dengan Angular (di lingkungan Jasmine), Angular akan benar-benar memanggil di donebelakang layar saat kita menggunakan async. Ini akan melacak semua tugas asinkron di Zone, dan ketika semuanya selesai, doneakan dipanggil di belakang layar.
Dalam kasus khusus Anda dengan TestBedkonfigurasi, Anda akan menggunakan ini secara umum bila Anda mau compileComponents. Saya jarang mengalami situasi di mana saya harus menyebutnya sebaliknya
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
Saat menguji komponen yang menggunakan templateUrl(jika Anda tidak menggunakan webpack), Angular perlu membuat permintaan XHR untuk mendapatkan template, sehingga kompilasi komponen akan asinkron. Jadi kita harus menunggu sampai selesai sebelum melanjutkan pengujian.
asynctidak perlu. Saat Anda menggunakantemplateUrl, itu. Namun, memasukkanasynctidak akan "merusak" komponen template-sebaris. Apakah menurut Anda aman untuk mengatakan bahwa satu default dapat digunakanasyncuntuk setiap pengujian?