正确的方法来对可观察到的流进行单元测试

时间:2016-11-16 23:23:54

标签: javascript unit-testing rxjs observable

我用它来测试服务是否将项添加到可观察的错误流中。

it('can be subscribed for errors', () => {
    let testError = new Error('Some error.');
    let called = false;
    let subscription = service.onError.subscribe(error => {
        called = true;
        expect(error).toEqual(testError);
    });
    /// This makes an error to be added to onError stream
    service.setError(testError);
    expect(called).toEqual(true);
});

我使用called变量来确保实际调用了订阅回调。否则,测试将在不应该通过的情况下通过。但它对我来说似乎并不合适。此外,如果流是异步的,它将无法工作。

这是测试它的好方法吗?如果没有,如何正确地做到这一点?

编辑:这是正在测试的课程。它实际上是打字稿。

import { ReplaySubject } from 'rxjs/Rx';

export class ErrorService {
    private error: Error;

    public onError: ReplaySubject<Error> = new ReplaySubject<Error>();

    constructor() {
    }

    public setError = (error: Error) => {
        this.error = error;
        console.error(error);
        this.onError.next(error);
    }

    public getError() {
        return this.error;
    }

    public hasError() {
        return !!this.error;
    }
}

1 个答案:

答案 0 :(得分:1)

您的测试方式很好。你是:

  • 使用expect语句检查值是否正确。
  • 检查expect语句正在执行的事实。

特别是最后一部分很重要,否则预期可能不会被触发,测试将错误地通过。