Учитывая два эффекта NGRX (с использованием нотации nrwl/nx dataPersistence), где второй связан с первым с помощью takeUntil:
@Injectable()
export class ModuleEffects {
@Effect() effectOne$ = this.dataPersistence.fetch(ModuleActionTypes.ActionOne, {
run: (action: ActionOne, state: ModulePartialState) => {
return new SomeReturnAction();
},
});
@Effect() effectTwo$ = this.dataPersistence.fetch(ModuleActionTypes.ActionTwo, {
run: (action: ActionTwo, state: ModulePartialState) => {
return this.service.apiCall().pipe(
takeUntil(this.effectOne$),
map(result => new SomeResultAction(result))
);
},
});Намерение состоит в том, чтобы прекратить генерировать SomeResultAction из-за ввода пользовательского интерфейса, как только будет генерирован effectOne$ (что отлично работает).
Сейчас я пытаюсь проверить эти эффекты, используя библиотеку jasmine-marbles:
it('should stop emitting after effectOne$ has emitted', () => {
const action = new ActionTwo();
const interruptingAction = new ActionOne();
const outcome = new SomeResultAction(mockedResult);
actions = hot(' -a--a-ia|', { a: action, i: interruptingAction });
const expected = cold('-b--b--b|', { b: outcome });
expect(effects.effectTwo$).toBeObservable(expected);
});Этот тест завершается успешно, хотя я ожидаю, что наблюдаемая expected завершится после отправки interruptingAction.
Нет, на самом деле нет. Но, как старый призрак, преследующий меня, я только недавно снова взялся за тестирование наблюдаемых с помощью rxjs-marbles, и у меня возникает соблазн взглянуть на это еще раз.





Вы когда-нибудь находили решение для этого?