Насмешливые вызовы API действий Vuex с помощью Jest / Moxios - PullRequest
0 голосов
/ 12 ноября 2018

Я использовал Moxios для имитации вызовов API в Vue shallowMount ed Компоненты без проблем, но после многих попыток мне не удалось смоделировать вызов Axios API, выполненный в действии Vuex ...

Это мой минимальный src/store/actions.js:

import axios from "axios";
import queryString from "query-string";

const api = axios.create({
    baseURL: "https://api.example.com/service",
});

export default {
    fetch: function(context, params) {
        context.commit("startLoading");
        api
            .request({
                url: `/endpoint?${queryString.stringify(params)}`,
                method: "get"
            })
            .then(response => {
                context.commit("processResponse", response.data);
            })
            .catch(error => context.commit("errorFlag"))
            .finally(() => context.commit("stopLoading"));
    }
};

И мой spec файл:

import moxios from "moxios";
import store from "@/store";
import actions from "@/store/actions";
import response from "./mock-data/response.json";

describe("fetch action", () => {
    beforeEach(() => {
        moxios.install();
    });

    afterEach(() => {
        moxios.uninstall();
    });

    it("should fetch its stuff", done => {
        moxios.stubRequest(/endpoint/, {
            status: 200,
            response
        });

        actions.fetch(store, { someparam: "someValue" });

        moxios.wait(() => {
            expect(store.state.results.stuff.length).toBe(response._meta.total)
            done();
        });
    });
});

Test FAILS, и я также получаю сообщение об ошибке вроде:

console.error node_modules / jsdom / lib / jsdom / virtual-console.js: 29 Ошибка: Uncaught [Ошибка: ожидается (получено) .toBe (ожидается) // Object.is равенство Ожидаемое: 96 Получено: 0]

moxios.wait обратный вызов выполняется и мутация startLoading выполняется. Но processResponse в api then() никогда не вызывается.

Я следовал тому же подходу к тестированию Vue Component, с moxios.stubRequest, и он работал отлично, поэтому я предполагаю, что проблема в том, что, поскольку действия импортируются в тесте, api создается и moxios не может действительно захватить и высмеять вызов, но я не совсем уверен в этом ...

Я безуспешно перебираю другие вопросы, связанные с SO, и многие статьи, я не могу понять, что происходит в моем случае ... поэтому любая подсказка / помощь будет высоко оценена!

...