【发布时间】:2018-06-07 17:56:50
【问题描述】:
我最近将一个项目升级到 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);
})
);
在 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]}]
有人知道会发生什么吗?
【问题讨论】:
-
我不知道这是不是 Jasmine 的东西,但是你确定你需要
async,因为你没有任何await吗? -
@Seblor 在这种情况下,
async不是 JavaScript 的async关键字,它是 Angular 提供的辅助函数。 -
感谢您的信息。你有关于那个文档的链接吗?
-
你试过这个修复吗? github.com/angular/protractor/issues/…
标签: javascript angular typescript jasmine