mercredi 20 mars 2019

Testing production vuex instance in JEST

I have some Vuex modules in my project (for example school, people etc.). Every module has its actions, mutations, state and getters. Each of them I want to test. For example, I have action like below in store/school/actions.js

fetchGroups({ dispatch, commit, getters, rootGetters }, params = {}) {
        const { page, perPage, filter } = {
            page: params.page || getters.groupsPagination.page,
            perPage: params.perPage || getters.groupsPagination.perPage,
            filter: getters.groupsFilter
        }
        return new Promise(async(resolve, reject) => {
            try {
                const { data } = await http.get(
                    `school/${rootGetters.currentSchoolId}/groups`,
                    { params: { per_page: perPage, page, filter: filter } }
                );


                commit('setState', { collection: 'groups', data: data.data });
                commit('setPagination', { collection: 'groups', pagination: data.paginate });
                commit('setFiltered', { collection: 'groups', filtered: data.data });
                commit('setCheckedGroups', data.data);
                resolve(data);
            } catch (e) {
                reject(e);
            }
        });
    },

Now I want to test it without create a new vuex store. I want to mock only response from API. I tried to do this but my code does not work (test passes but without any console logs)

import axios from 'axios';
import store from '@/store';
import MockAdapter from 'axios-mock-adapter';

describe('actions', () => {
    let http;

    beforeAll(() => {
        http = new MockAdapter(axios);

        http.onGet('school/2298/groups').reply(200, { data: { foo: 'bar' } });
    });

    afterEach(() => {
        http.reset();
    });

    afterAll(() => {
        http.restore();
    });

    it('test', () => {
        store.dispatch('school/fetchGroups').then(foo => {
            console.log('adwwad');
        }).catch(e => {
            console.log('boo');
        })
    });
})

Regards

Aucun commentaire:

Enregistrer un commentaire