gpt4 book ai didi

unit-testing - Angular2 whenStable() 不能与 observable 一起工作?

转载 作者:太空狗 更新时间:2023-10-29 18:25:51 25 4
gpt4 key购买 nike

我在一个 Angular2 组件的 ngOnInit 方法中运行一个 http 调用(使用 obervable):

ngOnInit() {
this.descriptorService.generateDescriptors(new Server());
this.fetchData();
}

fetchData () {
console.log('Starting Http call');
this.dataService.listAll(Server).subscribe(
servers=>{console.log('Http Call done');this.listServers=servers},
error=>console.log(error)
);
}

使用以下 dataService.listAll():

listAll(zeClass:typeof Model): Observable<T[]> {
console.log('Http call begin');
return this.http.get(this.calculateUrl(zeClass))
.map(this.extractData)
.map((jsonArray)=>{
let data:Array<ModelInterface>=new Array<ModelInterface>();
if (isArray (jsonArray)) {
console.log('Http call in');
...
return data;
})
.catch(this.handleError);
}

当我为此组件运行以下单元测试时(http 是使用 InMemoryWebApiModule 模拟的):

it('should display the list of servers', async(() => {
fixture.detectChanges();
console.log('Before whenStable():'+fixture.isStable());
fixture.whenStable().then(()=>{
console.log('In whenStable()');
fixture.detectChanges();
let de:Array<DebugElement> = fixture.debugElement.queryAll(By.css('md-list-item'));

expect(de.length).toBeGreaterThan(1);
});
console.log('After whenStable():'+fixture.isStable());
}));

然后我在控制台中得到以下日志:

 LOG: 'Starting Http call'
LOG: 'Http call begin'
LOG: 'Before whenStable():false'
LOG: 'After whenStable():false'

可以看到whenStable()里面的测试代码根本没有运行...为什么?

最佳答案

感谢@jonrsharpe 为我指明了正确的方向。实际上,我不得不使用 Jasmine done 和 spies。

有关信息,这是工作测试代码:

 beforeEach(inject([GenericDataService], (dataService) => {
spy = spyOn(dataService,'listAll').and.callThrough();
...
}

it('should display the list of servers', done => {
fixture.detectChanges();

spy.calls.mostRecent().returnValue.subscribe (() => {
console.log('In spy()');
fixture.detectChanges();
let de:Array<DebugElement> = fixture.debugElement.queryAll(By.css('md-list-item'));

expect(de.length).toBeGreaterThan(1);
done();
});
});

关于unit-testing - Angular2 whenStable() 不能与 observable 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com