Angular 5:单元测试getter和setter

时间:2017-12-07 15:13:23

标签: angular unit-testing karma-runner

我无法使用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:预期未定义为等于'测试标题'

1 个答案:

答案 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时使用它们。 :-)

我希望能有所帮助。

热烈的问候

相关问题