我很清楚这个错误:
https://github.com/angular/angular/issues/10148
其中提到需要调用fixture.detectChanges();
然后调用fixture.whenStable()
。
但是,当我开始嵌套每个使用ngModel值访问器提供程序的元素时,我必须在循环中调用这两个方法。
有不同的方法吗?它看起来并不高效,我不断需要编辑这个功能。我可以使用递归方法来简化这一点,以防止重复,但这不是问题。
export function bugWhenStable(fixture: ComponentFixture<any>): Promise<any> {
let def = new Promise(resolver => {
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
fixture.whenStable().then(() => {
resolver();
});
});
});
});
return def;
}
我的组件做了这样的事情:
<wm-comp1 [(ngModel)]="value"></wm-comp1>
我在Comp1中有哪些
<wm-comp2 [(ngModel)]="value"></wm-comp2>
等
答案 0 :(得分:1)
你试过将承诺退还给下一个fn吗?这将makeit等待它解决。我在我的规格中尝试了一次并且工作得很好。看起来更干净。
export function bugWhenStable(fixture: ComponentFixture<any>): Promise<any> {
let def = new Promise(resolver => {
fixture.detectChanges();
fixture.whenStable()
.then(() => {
fixture.detectChanges();
return fixture.whenStable();
}).then(() => {
fixture.detectChanges();
return fixture.whenStable()
}).then(() => {
resolver();
});
});
return def;
}
也有些人这样做,但我从未尝试过。
export function bugWhenStable(fixture: ComponentFixture<any>): Promise<any> {
let def = new Promise(resolver => {
fixture.detectChanges();
tick();
fixture.detectChanges();
tick();
fixture.detectChanges();
tick();
resolver();
});
});
return def;
}
答案 1 :(得分:1)
为什么不使用async/await
it('should do whatever', async(async() => {
fixture.detectChanges();
await fixture.whenStable();
}));