私は最後の数日間rxjsとredux-observableで遊んでいて、Observable.ajaxのテストへの道を見つけるのが苦労しています。私は、ブラウザで実行されますが、冗談でテストしていないときときObservable.ajax(redux-observable)はどのようにテストできますか?
export const REQUEST = 'my-app/testApi/REQUEST'
export const SUCCESS = 'my-app/testApi/SUCCESS'
export const FAILURE = 'my-app/testApi/FAILURE'
export const CLEAR = 'my-app/testApi/CLEAR'
export function requestTestApi() {
return { type: REQUEST }
}
export function successTestApi (response) {
return { type: SUCCESS, response }
}
export function failureTestApi (error) {
return { type: FAILURE, error }
}
export function clearTestApi() {
return { type: CLEAR }
}
コードが正常に動作し、
export function testApiEpic (action$) {
return action$.ofType(REQUEST)
.switchMap(action =>
Observable.ajax({ url, method })
.map(data => successTestApi(data.response))
.catch(error => failureTestApi(error))
.takeUntil(action$.ofType(CLEAR))
)
}
、 https://jsonplaceholder.typicode.com/にリクエストを作成するには、次の叙事詩を持っています。私が試してみる
、
1)https://redux-observable.js.org/docs/recipes/WritingTests.htmlに基づいてテストを作成します。 store.getActions()は{type:REQUEST}のみを返します。
const epicMiddleware = createEpicMiddleware(testApiEpic)
const mockStore = configureMockStore([epicMiddleware])
describe.only('fetchUserEpic',() => {
let store
beforeEach(() => {
store = mockStore()
})
afterEach(() => {
epicMiddleware.replaceEpic(testApiEpic)
})
it('returns a response,() => {
store.dispatch({ type: REQUEST })
expect(store.getActions()).toEqual([
{ type: REQUEST },
{ type: SUCCESS, response }
])
})
})
2)Redux-observable: failed jest test for epicに基づいてテストを作成します。
タイムアウト - 非同期コールバックがjasmine.DEFAULT_TIMEOUT_INTERVALで指定されたタイムアウト内に呼び出されませんでした。
it('returns a response', (done) => {
const action$ = ActionsObservable.of({ type: REQUEST })
const store = { getState:() => {} }
testApiEpic(action$, store)
.toArray()
.subscribe(actions => {
expect(actions).to.deep.equal([
{ type: SUCCESS, response }
])
done()
})
})
誰かがObservable.ajaxをテストするための正しい方法は何か私を指摘することはできますか?