所以我正在尝试测试一个主题的行为,但它不起作用,而且似乎有些事情我没有正确理解。考虑以下测试:
it('marble testing subject test', () => {
const obs$: Subject<number> = new Subject<number>();
obs$.next(42);
obs$.next(24);
expect(obs$.asObservable()).toBeObservable(hot('xy', { x: 42, y: 24 }));
});
这将失败并显示以下错误消息:
Expected $.length = 0 to equal 2.
Expected $[0] = undefined to equal Object({ frame: 0, notification: Notification({ kind: 'N', value: 42, error: undefined, hasValue: true }) }).
Expected $[1] = undefined to equal Object({ frame: 10, notification: Notification({ kind: 'N', value: 24, error: undefined, hasValue: true }) }).
我想我有点理解为什么:(Subject
每个文档)仅在订阅开始后才发出值。该toBeObservable()
函数(我假设)订阅了Subject
,所以我的 2 个next
调用发生在此之前,所以它们不会发出。
所以我的问题是,我将如何测试这样的东西?即随着时间的推移测试来自一个主题的一系列排放?这可能与大理石测试有关吗?我可以通过将其更改为 a 来使其工作,ReplaySubject
但如果我这样做,大理石图必须是(xy)
而不是xy
.
谢谢。