我遵循從documentation步驟來測試史詩。Redux-observable:失敗的歌劇測試史詩
...
store.dispatch({ type: FETCH_USER });
expect(store.getActions()).toEqual([
{ type: FETCH_USER },
{ type: FETCH_USER_FULFILLED, payload }
]);
...
,但我得到失敗,因爲已經收到了一些後來像下面的第二個動作。
Test failed
Expected value to equal:
[{"type": "FETCH_USER"}, {"type": "FETCH_USER_FULFILLED", "payload": [some]}]
Received:
[{"type": "FETCH_USER"}]
Difference:
- Expected
+ Received
@@ -1,20 +1,5 @@
Array [
Object {"type": "FETCH_USER"},
Object {"type": "FETCH_USER_FULFILLED", "payload": [some]} ] // this is what should be.
所以我想我應該知道什麼時候調度完成或者類似的。 我該如何解決這個問題?
我用取()和Rx.Observable.fromPromise代替ajax.getJSON()
這裏是我的史詩。
const fetchUserEpic = (action$) =>
action$
.ofType(FETCH_USER)
.mergeMap(() => {
return Rx.Observable.fromPromise(api.fetchUser())
.map((users) => ({
type: FETCH_USER_FULFILLED,
payload: { users }
}))
.catch((error) => Rx.Observable.of({
type: FETCH_USER_ERROR,
payload: { error }
}))
.takeUntil(action$.ofType(FETCH_USER_CANCELLED))
})
我看答案是正確的。我得到了「TypeError:無法讀取屬性'_location'null',儘管它不在問題之中。 – Oscar
我在這上面敲了幾個小時......試過這個,得到了「...數組不是函數」的錯誤。 –
好的,添加導入'rxjs/add/operator/toArray'解決了它... –