我正在将rxjs 6与redux-observable 1配合使用,并为史诗编写测试
const signInEpic = action$ =>
action$
.ofType(authActions.signIn)
.pipe(
switchMap(mapSignInAction$)
)
我正在使用TestScheduler通过大理石图进行测试,并在运行测试时返回错误action$.ofType is not a function
测试:
import { TestScheduler } from 'rxjs/testing'
const scheduler = new TestScheduler((actual, expected) => {
expect(actual).toEqual(expected)
})
scheduler.run(({ cold, hot, expectObservable }) => {
const action$ = hot('-a', { a: { type: 'HFJKDHF' } })
const state$ = null
const output$ = signInEpic(action$, state$)
expectObservable(output$).toBe('--b', {
b: actions.signInSuccess(response)
})
})
答案 0 :(得分:1)
该错误是正确的,因为您创建了hot()
可观察的对象,然后将其传递给signInEpic
方法。但是.ofType
在Observable类上不存在,该方法特定于redux-observable
。
通过快速查看源代码,您可以创建一个$actions
自己可以观察的模拟:
https://github.com/redux-observable/redux-observable/blob/master/src/ActionsObservable.js
例如这样的例子:
import { ActionsObservable } from 'redux-observable';
scheduler.run(({ cold, hot, expectObservable }) => {
const source = hot('-a', { a: { type: 'HFJKDHF' } });
const actions$ = ActionsObservable.of(source);
const state$ = null
const output$ = signInEpic(action$, state$)
expectObservable(output$).toBe('--b', {
b: actions.signInSuccess(response);
});
});
答案 1 :(得分:1)
相反,action$.ofType
需要使用action$.pipe(ofType(...), ...)
import { ofType } from 'redux-observable'
action$
.pipe(
ofType(authActions.signIn),
switchMap(mapSignInAction$)
)