Wie unit-Tests in diesem Redux thunk?
Also ich habe das Redux-action-Schöpfer, der mit redux thunk
middleware:
accountDetailsActions.js:
export function updateProduct(product) {
return (dispatch, getState) => {
const { accountDetails } = getState();
dispatch({
type: types.UPDATE_PRODUCT,
stateOfResidence: accountDetails.stateOfResidence,
product,
});
};
}
Wie kann ich es testen? Ich bin mit der chai
- Paket zum testen. Ich habe einige online-Ressourcen, aber ich bin nicht sicher, wie es weiter geht. Hier ist mein test bisher:
accountDetailsReducer.test.js:
describe('types.UPDATE_PRODUCT', () => {
it('should update product when passed a product object', () => {
//arrange
const initialState = {
product: {}
};
const product = {
id: 1,
accountTypeId: 1,
officeRangeId: 1,
additionalInfo: "",
enabled: true
};
const action = actions.updateProduct(product);
const store = mockStore({courses: []}, action);
store.dispatch(action);
//this is as far as I've gotten - how can I populate my newState variable in order to test the `product` field after running the thunk?
//act
const newState = accountDetailsReducer(initialState, action);
//assert
expect(newState.product).to.be.an('object');
expect(newState.product).to.equal(product);
});
});
Meine thunk nicht asynchrone Aktionen. Irgendwelche Ratschläge?
- Haben Sie einen Blick auf diese Antwort stackoverflow.com/questions/41525794/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Unit-Tests Redux Thunks
Den ganzen Punkt ein thunk-Aktion creator ist der Versand asynchrone Aktionen in der Zukunft. Bei der Verwendung von redux-thunk ein guter Ansatz ist das Modell der asynchronen Fluss der Anfang und das Ende resultierende Erfolg oder ein Fehler mit drei Aktionen.
Obwohl in diesem Beispiel verwendet Mocha und Chai zum testen könnte man durchaus als leicht zu verwenden, eine assertion-Bibliothek oder Test-Frameworks.
Modellierung der asynchronen Prozess mit mehreren Aktionen, geschafft von unserem Haupt-thunk-Aktion creator
Lassen Sie uns annehmen, zum Wohle dieses Beispiel, das Sie ausführen möchten, ein asynchroner Vorgang, dass updates ein Produkt und wollen wissen, drei entscheidende Dinge.
Okay so Zeit zu Modell unsere redux Aktionen basierend auf diesen Stufen der Betrieb des Lebenszyklus. Denken Sie daran das gleiche gilt für alle asynchronen Operationen, so würde Häufig angewendet werden, um http-Anforderungen zum abrufen von Daten aus einer api.
Können wir schreiben unsere Aktionen so gerne.
accountDetailsActions.js:
Beachten damit beschäftigt, Maßnahmen auf der Unterseite. Das ist unser thunk action Schöpfer. Da gibt es eine Funktion, es ist eine Besondere Aktion, die abgefangen wird von redux-thunk-middleware. Dass thunk Aktion creator versenden können die anderen action-Macher an einem Punkt in der Zukunft. Ziemlich smart.
Nun haben wir geschrieben, die Aktionen zu modellieren, wird ein asynchroner Prozess, der einen Benutzer zu aktualisieren. Lassen Sie uns sagen, dass dieser Prozess eine Funktion aufrufen, die eine Zusage zurückgibt, als wäre die häufigste Methode heute für den Umgang mit asynchronen Prozessen.
Definieren Sie die Logik für das eigentliche asynchrone operation, die wir modellieren mit redux Aktionen
Für dieses Beispiel werden wir nur schaffen, eine generische Funktion, die eine Zusage zurückgibt. Ersetzen Sie diese mit der eigentlichen Funktion, dass updates Benutzer oder funktioniert der asynchrone Logik. Sicherstellen, dass die Funktion gibt ein Versprechen.
Verwenden wir die definierte Funktion unten, um die zum erstellen eines funktionierenden selbst-enthalten Beispiel. Um ein funktionierendes Beispiel, nur werfen Sie diese Funktion in Ihren Aktionen-Datei, so ist es im Rahmen Ihrer thunk Aktion creator.
Unsere test-Datei
fetchMock.restore()
nie aufgerufen werden, weil Sie tun, einereturn
aufstore.dispatch()
?Haben Sie einen Blick auf Rezept: Schreiben Von Tests aus der offiziellen Dokumentation. Auch was du testen, die Aktion Schöpfer oder die reducer?
Aktion Creator Test-Beispiel
Reducer Test-Beispiel
Ihre reducer sollte eine Reine Funktion, so können Sie es testen in isolation außerhalb des Ladens Umfeld.
actions.updateProduct()
). Bei der Prüfung Reduzierstücke, welcher Weg der bessere Praxis?