Я использую jest
и jasmine-marbles
для проверки моего ngrx-effects
. Пока все хорошо, но у меня есть особый случай, когда мне нужно использовать withLatestFrom
для доступа к Store
внутри эффекта, подобного этому:
@Effect()
createDataSourceSuccess$ = this.actions$
.ofType<sourceActions.CreateDataSourceSuccess>(
sourceActions.DataSourceActionTypes.CreateDataSourceSuccess
)
.pipe(
map(action => action.dataSource),
withLatestFrom(this.store.select(getSourceUploadProgress)),
switchMap(([source, progress]: [DataSource, UploadProgress]) =>
of(
new sourceActions.StartSourceUploadProgress({
id: source.fileId,
uploadProgress: progress,
})
)
)
);
Также я настроил свой тест так:
it('should return StartSourceUploadProgress for CreateDataSourceSuccess', () => {
const dataSource = dataSources[0];
const action = new dataSourceActions.CreateDataSourceSuccess(dataSource);
const outcome = new dataSourceActions.StartSourceUploadProgress({
id: dataSource.fileId,
uploadProgress: null,
});
store.select = jest.fn(_selector => of(null));
actions.stream = hot('-a-', { a: action });
const expected = cold('--b', { b: outcome });
expect(effects.createDataSourceSuccess$).toBeObservable(expected);
});
Я бы также отметил, что я успешно настроил макеты для Store
и Actions
, так как все остальные тесты работают нормально. Единственная разница между этим и другими заключается в том, что Store
и withLatestFrom
не присутствуют в этих эффектах.
Наконец, это вывод ошибки:
DataSourceEffects › should return StartSourceUploadProgress for CreateDataSourceSuccess
TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
Есть мысли?