async
async
tüm görevlerini bitirene kadar sonraki testin başlamasına izin vermeyecektir . Ne async
yapar 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, async
tamamlanı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 done
perde arkasını arayacaktır async
. Bölgedeki tüm asenkron görevleri takip edecek ve hepsi bittiğinde done
sahne arkasına çağrılacak.
TestBed
Konfigü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.
async
olduğunda gerekli değildir. KullanırkentemplateUrl
, öyle. Ancak, dahil etmekasync
, bir satır içi şablon bileşenini "bozmaz". Bir kişininasync
her test için varsayılan olarak kullanılabileceğini söylemenin güvenli olduğunu düşünüyor musunuz ?