reduxjs / redux-mock-store

A mock store for testing Redux async action creators and middleware.
MIT License
2.5k stars 149 forks source link

Middleware persistence when used with redux-observable #124

Open JalilArfaoui opened 6 years ago

JalilArfaoui commented 6 years ago

Do you want to request a feature or report a bug?

A bug I think, but not sure if it's redux-observable or redux-mock-store who has the wrong behavior. So I will post in both repos.

What is the current behavior?

When writing a single test with jest and redux-mock-store, everything works as expected. But if I use the mockStore multiple times (in the same test or even in another), then the actions dispatched in any of the created stores are sent multiple times in the observable (but only once in the store, as store.getActions() states.

Here's a reproduction repo : https://framagit.org/jalil/redux-observable-mock-store-duplicate

tldr;

This works :

const store = mockStore();
store.dispatch({ type: 'FOO' }); // -> Observable get 1 FOO action

This doesn't :

const store = mockStore();
store2 = mockStore();
mockStore();
store.dispatch({ type: 'FOO' }); // => Observable get 3 FOO actions
const store = mockStore();
store2 = mockStore();
mockStore();
mockStore();
mockStore();
store.dispatch({ type: 'FOO' }); // -> Observable get 5 FOO actions

... and so on ...

What is the expected behavior?

I expect, as I use replaceEpic and mockStore, and I use different jest tests, that one test should not affect another, and one mockStore should not affect another.

So, I expect, even if I have multiple tests each one calling mockStore(), to have my epics receiving the right stream of actions.

Which versions of redux-observable, and which browser and OS are affected by this issue? Did this work in previous versions of redux-observable?

My above reproduction code uses :

"redux": "^3.7.2",
"redux-observable": "^0.17.0",
"rxjs": "^5.5.6"
"jest": "^22.0.4",
"redux-mock-store": "^1.4.0"

Thanks for your help.

JalilArfaoui commented 6 years ago

Issue on redux-observable : https://github.com/redux-observable/redux-observable/issues/389

JalilArfaoui commented 6 years ago

It's seems the problem is on redux-observable side : https://github.com/redux-observable/redux-observable/issues/389#issuecomment-354623405