javascript - 对正在馈送的可观察流进行单元测试的正确方法

标签 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);
});

我使用变量来确保订阅回调确实被调用。否则测试会在不应该通过的时候通过。但这对我来说似乎不对。另外,如果流是异步的,它将无法工作。

这是测试的好方法吗?如果没有,如何正确执行?

编辑:这是正在测试的类。实际上,它是用 typescript 写的。

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;
    }
}

最佳答案

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

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

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

关于javascript - 对正在馈送的可观察流进行单元测试的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644119/

相关文章:

javascript - xhr 缓存 getResponseHeader 中的值?

javascript - RxJS:将源 Observable 划分为 3 个或更多 Observable 的优雅方式

javascript - jquery sortable 除了这个

javascript - 使用 jQuery 选择一个不存在的 ID

javascript - redux 的本地存储无法按预期工作

javascript - 编译后的 Javascript 无法在生产模式下工作

javascript - 访问链中后面的变量

python - Django 测试。状态 200 和 302

database - 测试依赖于数据库的代码的更好做法是什么?模拟和 stub ?还是种子数据?

php - 为什么stdClass和匿名类在assertEquals()中表现不同?