Итак, я пытаюсь проверить поведение Субъекта, и оно не работает, и кажется, что некоторые вещи я не правильно понимаю. Рассмотрим следующий тест:
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
происходили до этого, поэтому они не излучали.
Итак, мой вопрос: как бы я протестировал что-то подобное? то есть тестирование серии выбросов от объекта с течением времени? Можно ли это сделать с тестированием мрамора? Я могу заставить его работать, заменив его на ReplaySubject
, но если я это сделаю, мраморная диаграмма должна быть (xy)
вместо xy
.
Спасибо.