[英]Angular test with `async` causing Jasmine timeout?
我最近將一個項目升級到 Angular 6,現在之前運行良好的測試現在失敗了。 以下是其中一項測試的示例:
beforeEach(
async(() => {
TestBed.configureTestingModule({
declarations: [CampaignsDetailScheduleComponent],
imports: [
SomeModule,
ReactiveFormsModule,
TranslateModule.forRoot({
loader: { provide: TranslateLoader, useClass: TranslateFakeLoader }
}),
StoreModule.forRoot({})
],
providers: [{ provide: ConfigService, useValue: ConfigServiceMock }],
schemas: [NO_ERRORS_SCHEMA]
});
fixture = TestBed.createComponent(CampaignsDetailScheduleComponent);
comp = fixture.componentInstance; // Component test instance
_store = fixture.debugElement.injector.get<Store<State>>(Store);
comp.campaignModel$ = of(CampaignMockData);
fixture.detectChanges();
})
);
it(
'close edit schedule modal',
async(() => {
spyOn(_store, 'dispatch');
comp.onClose();
const args = new ShowHideEditScheduleModal(false);
expect(_store.dispatch).toHaveBeenCalledWith(args);
})
);
Pre-Angular 6,此測試順利通過。 但是現在在 Angular 6 下,我收到錯誤消息:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.--Pendng async tasks are: [type: macroTask, source: setInterval, args: {handleId:4072,isPeriodic:true,delay:0,args:[object Arguments],__creationTrace__:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]},type: macroTask, source: setInterval, args: {handleId:4075,isPeriodic:true,delay:0,args:[object Arguments],__creationTrace__:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]}]
有誰知道可能會發生什么?
在每個塊之前使用fakeAsync
而不是async
。
您可以通過執行以下操作來增加默認的茉莉花超時(即 5 秒)間隔
it(
'close edit schedule modal',
async(() => {
spyOn(_store, 'dispatch');
comp.onClose();
const args = new ShowHideEditScheduleModal(false);
expect(_store.dispatch).toHaveBeenCalledWith(args);
// increase default timeout interval to 10s
}), 10000);
或者您可以使用done()
方法解決它。 添加這將等待您的測試完成。 我猜你不能在使用done()
使用async
it('close edit schedule modal', (done) => {
spyOn(_store, 'dispatch');
comp.onClose();
const args = new ShowHideEditScheduleModal(false);
expect(_store.dispatch).toHaveBeenCalledWith(args);
done();
// increase default timeout interval to 10s
}, 10000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.