And*_*son 10 unit-testing karma-runner angular
我无法使用Karma在Angular 5中测试getter和setter函数.关于我哪里出错的任何想法?
设置该值,然后测试等待较短的持续时间,以便在调用getter函数之前解析setter函数.这是代码:
service.ts
set header(h: string) {
this.zone.run(() => {
this._header = h;
});
}
get header(): string {
return this._header;
}
Run Code Online (Sandbox Code Playgroud)
test.ts
before(() => {
service = new Service()
});
it('updates header', (done) => {
const header = 'test header';
service.header = header;
// Give header time to update
return Promise.delay(200)
.then(() => {
expect(service.header).to.equal(header);
})
});
Run Code Online (Sandbox Code Playgroud)
我希望断言成功解决,但是我收到错误
AssertionError:预期未定义为等于'test header'
您将设置的内容包装到区域中是否有原因?
对于 99% 的异步活动,我喜欢 Angular 的“fakeAsync”和“tick”方法。
it('should update header', fakeAsync( ()=>{
const header = 'test header';
service.header = header;
tick() // <= Will wait for for all microtransactions to finish
expect(service.header).to.equal(header);
}))
Run Code Online (Sandbox Code Playgroud)
有很多关于 JavaScript 中的宏交易和微交易的好文章。简而言之,可观察发射的承诺和订阅是微交易。
“setTimeout”是宏事务的示例。
fakeAsync-UnitTest 中的“tick()”最好的一点是,您不必建议代码需要等待多长时间。“tick()”只是排空微交易队列,因此在测试继续之前所有等待的微交易都将得到解决。
您也可以在等待 Angular 组件的changeDetection 时使用它们。:-)
我希望这能有所帮助。
温暖的问候
| 归档时间: |
|
| 查看次数: |
1742 次 |
| 最近记录: |