【发布时间】:2020-01-24 12:04:06
【问题描述】:
我不明白为什么.getValue() 返回 Observable 的默认值,而不是最后发出的值。在测试 Observable 时,它正确返回了发出的值。
class TestA {
readonly aSource: BehaviorSubject<number> = new BehaviorSubject(null);
getA(): number {
return this.aSource.getValue();
}
promise(): void {
Promise.reject()
.catch(() => {
this.aSource.next(2);
console.log(this.getA()); // Outputs: 2
});
}
}
describe('TestA', () => {
it('promise', () => {
const a = new TestA();
a.promise();
// Test 1 OK
expect(a.aSource.asObservable()).toBeObservable(hot('a', {a: 2}));
// Test 2 FAIL (returns null)
expect(a.aSource.getValue()).toEqual(2);
// Test 3 FAIL (returns null)
expect(a.getA()).toEqual(2);
});
});
澄清一下,getValue() 方法在测试之外工作得很好,它只会在使用 Jest 测试时失败。
谢谢!
【问题讨论】:
-
好的,我的假设是
Promise.reject()将被视为同步代码。
标签: typescript rxjs jestjs rxjs-marbles