我用它来测试服务是否将一个项目添加到可观察的错误流中。
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/