asyncasynctüm görevlerini bitirene kadar sonraki testin başlamasına izin vermeyecektir . Ne asyncyapar geri aramayı, tüm eşzamansız görevlerin (örneğin setTimeout) izlendiği bir Bölgeye kaydırmaktır . Eşzamansız tüm görevler tamamlandığında, asynctamamlanır.
Jasmine ile Angular dışında daha önce çalıştıysanız done, geri aramanın geçirildiğini görmüş olabilirsiniz.
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
Burada, burası Jasmine, Jasmine'e bu testin biz arayana kadar tamamlamayı ertelemesi gerektiğini söylediğimiz yer done(). Biz aramadıysak done()ve yerine şunu yaptıysak:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
Test, beklentiden önce bile tamamlanır, çünkü söz daha sonra çözülür , senkron görevleri yürütme test bittikten .
Angular ile (Jasmine ortamında), Angular, kullandığımızda aslında doneperde arkasını arayacaktır async. Bölgedeki tüm asenkron görevleri takip edecek ve hepsi bittiğinde donesahne arkasına çağrılacak.
TestBedKonfigürasyonla ilgili özel durumunuzda , bunu genellikle istediğiniz zaman kullanırsınız compileComponents. Başka türlü adlandırmak zorunda kalacağım bir duruma nadiren rastlarım
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
Kullanan bir bileşeni test ederken templateUrl(web paketi kullanmıyorsanız), Angular'ın şablonu almak için bir XHR isteği yapması gerekir, böylece bileşenin derlemesi eşzamansız olacaktır. Bu yüzden teste devam etmeden önce çözülmesini beklemeliyiz.
asyncolduğunda gerekli değildir. KullanırkentemplateUrl, öyle. Ancak, dahil etmekasync, bir satır içi şablon bileşenini "bozmaz". Bir kişininasyncher test için varsayılan olarak kullanılabileceğini söylemenin güvenli olduğunu düşünüyor musunuz ?