我用它来测试服务是否将项添加到可观察的错误流中。
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;
}
}
答案 0 :(得分:1)
您的测试方式很好。你是:
特别是最后一部分很重要,否则预期可能不会被触发,测试将错误地通过。