[Dies ist eine Vue App, mit Vuex, erstellt mit vue-cli, mit Mokka, chai, karma, sinon]Testing vuex Aktion, die ein asynchrones enthält
Ich versuche Tests für meinen vuex Staat zu schaffen und ich möchte keinen Mock verwenden - eines meiner großen Ziele für diese Tests besteht darin, auch die API zu testen, von der die Daten kommen.
Ich versuche, die Dokumente für Chai-as-Versprochen zu folgen.
Dies ist eine Vereinfachung der vuex Aktion, die ich zu Test bin versucht:
const actions = {
login: (context, payload) => {
context.commit('setFlashMessage', "");
axios.get("https://first-api-call")
.then((response) => {
axios.post("https://second-api-call")
.then((response) => {
router.push({ name: "Home"});
context.commit('setFlashMessage', "Logged in successfully");
context.commit('setLogin', response.data);
});
},
Beachten Sie, dass die Anmeldung Aktion hat zwei Versprechen und nichts zurückgibt. Die Login-Aktion hat zwei Dinge: Sie setzt einen Zustand und ändert die Route.
Das Beispiel, das ich gesehen habe, dass die Verwendung von Chai-as-Versprochen erwartet, dass das Versprechen zurückgegeben wird. Das heißt:
var result = systemUnderTest();
return expect(result).to.eventually.equal(blah);
Aber in meinem Fall login() gibt nichts zurück, und ich bin nicht sicher, was ich zurückkehren würde, wenn es tut.
Dies ist, was ich bisher:
import store from '@/src/store/store'
describe('login',() => {
it('bad input',() => {
store.login({ username: "abcd", password: ""});
// What is the test I should use?
}
}