我无法使用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;
}
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);
})
});
我希望断言成功解决但是我收到错误
AssertionError:预期未定义为等于'测试标题'
答案 0 :(得分:0)
您是否有理由将您的设置内容包装到一个区域中?
对于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);
}))
关于JavaScript中的宏交易和微交易有很多不错的技巧。 简短的版本是,可观察到的发射的承诺和订阅是微交易。 “ setTimeout”是宏事务的示例。
fakeAsync-UnitTest中关于“ tick()”的最好之处在于,您不必暗示代码将需要等待多长时间。 “ tick”只会耗尽微事务队列,以便在测试进行之前解决所有等待的微事务。
您也可以在等待Angular组件的changeDetection时使用它们。 :-)
我希望能有所帮助。
热烈的问候