我正在使用Angular 7 +。
setInterval
我有一个代码,其中有一个1000 milliseconds
方法,该方法调用服务的url方法以每隔test
检索数据。另请注意,我不希望我的程序先等待1000毫秒,然后再调用url方法,即为什么我预调用方法 只一次 < / em>之前的setInterval。让我知道如何Problem Statement:
完全相同的行为。另外,请不要为实施而烦恼,因为它是根据我无法透露的业务要求完成的。
getDataFromUrl
假设我有一个URL,我每隔1秒检查一次我是否正在获取数据。对该网址的调用是在函数service
内,注入组件的someStorage = {};
constructor(private service: someService){}
ngOnDestroy(){
clearInterval(this.clearPeriodicRefresh);
}
ngOnChanges(){
let context = this;
this.periodicRefresh(context);
this.clearPeriodicRefresh = setInterval(function(){
this.periodicRefresh(context);
},1000);
}
periodicRefresh(self){
self.service.getDataFromUrl(url).subscribe(res => {
someStorage[res] = true;
},
err =>{
console.log(" Error Occured ");
});
}
内进行的。
请参考下面的代码。
it('should check for async data from url', fakeAsync()=>{
someServiceStub.getDataFromUrl.and.returnValue(of("chandni chowk"));
fixture.detectChanges();
expect(component.someStorage["chandni chowk"]).toBe(true); // executes successfully
setInterval(()=>{
someServiceStub.getDataFromUrl.and.returnValue(of("delhi"));
},1000);
tick(1000); // in milliseconds
discardPeriodicTasks();
expect(component.someStorage["delhi"]).toBe(true); // throws error
}));
现在我正在对这样的代码进行单元测试:
ERROR : expected undefined to be true
第二个Expect语句显示:
tick(2000)
我不知道为什么。但是,如果我执行的是 tick(1000)
而不是 NOTE
,则它可以工作。再次,我不确定为什么它会更早被跳过。
tick(1900)
:在1000到2000之间的任何计时器,例如直到{{1}}都抛出相同的错误,并且在2000毫秒之后的任何时间都可以正常工作。
如果有其他方法,也请告诉我如何编写更好的测试。