Ich implementiere bereits Unit Tests mit redux-mock-store
.Wie kann ich einen Store Singleton testen?
Ich möchte eine Integrationstest-Suite auf einer reaktiven nativen App ausführen, die Store-Singletons problemlos verwendet. Obwohl console.log
s bis zur Reducer-Funktion reichen (und scheinbar korrekt funktionieren), ändert sich der Status des Speichers nicht.
// __tests__/things.js
jest.mock('../app/store')
import 'react-native'
import * as selectors from '../app/selectors'
import * as sagas from '../app/sagas'
import { store } from '../app/store'
describe('Things',() => {
it('should toggle', async() => {
const previousCounter = selectors.count()
await sagas.increment()
expect(store.getState().count).toEqual(previousCounter)
})
})
Inzwischen ist die Scheinspeicherimplementierung:
// __mocks__
import { createStore } from 'redux'
import rootReducer from '../reducers'
export const store = createStore(rootReducer, {})
EDIT: Eine Probe Minderer
// app/reducers.js
function rootReducer (state = { count: 0 }, action = {}) {
const count = state.count + 1
return { ...state, count }
}
Alles funktioniert gut, aber der Staat nicht ändert. Wenn ich einen Beobachter durch das Abonnieren des Geschäfts implementiere, sehe ich, dass die Aktionsreihe versandt wird.
Sie sollten Ihren Reduzierer auch zeigen. – zurfyx
Fertig, ich habe eine Probe hinzugefügt. Aber auf der realen Codebasis, wie ich sage, funktionieren Reduktoren wie erwartet. Es ist so, wie sie Änderungen im "anderen" Geschäft speichern, eher im verspotteten Singleton. – jsdario
Scheint so, als ob dein Mock Store nicht mit Sagas verbunden ist. So ruft 'sagas.increment' keinen Effekt auf den Laden auf. –