J'ai suivi les étapes de documentation pour tester l'épopée.Redux-observable: échec test jest pour épique
...
store.dispatch({ type: FETCH_USER });
expect(store.getActions()).toEqual([
{ type: FETCH_USER },
{ type: FETCH_USER_FULFILLED, payload }
]);
...
Mais je suis tombé en panne car une seconde action a été reçue plus tard comme suit.
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.
Donc, je pense que je devrais savoir quand l'expédition est terminée ou d'autres comme ça. Comment puis-je résoudre ce problème?
J'utilisé fetch() et Rx.Observable.fromPromise au lieu de ajax.getJSON()
Voici mon épopée.
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))
})
Je vois la solution est correcte. Je reçois "TypeError: Impossible de lire la propriété '_location' de null", bien qu'il soit en dehors du problème. – Oscar
Je me cognais la tête dessus pendant quelques heures ... j'ai essayé ceci et j'ai eu l'erreur "... toArray n'est pas une fonction". –
ok, l'ajout de l'import 'rxjs/add/operator/toArray' l'a résolu ... –