Насмешливый vuex экшн с использованием мокко - PullRequest
0 голосов
/ 06 марта 2019

В настоящее время я тестирую конкретные действия модуля vuex.

Вот мой код: store / modules / users.js

export const state = () => ({
  users: [],
})

export const mutations = () => ({
  SET_USERS(state, users) {
    console.log('Should reach Here');
    state.users = users
  }
})

export const actions = () => ({
  getUsers({ commit }) {
     return axios.get('/users')
        .then(response => {
          console.log('Reaching Here');
          commit('SET_USERS', response.data.data.results)
        })
        .catch(error => {
          console.log(error);
        })
  } 
})

export const getters = () => {
   users(state) {
     return state.users;
   }
};

Затем, когда я проверяю свои действия:

tests /store / modules / users.js

it('should dispatch getUsers', () => {
    mock.onGet('/users').reply(200, {
      data: {
        results: [
          { uid: 1, name: 'John Doe' },
          { uid: 2, name: 'Sam Smith' }
        ]
      },
      status: {
        code: 200,
        errorDetail: "",
        message: "OK"
      }
    });

    const commit = sinon.spy();
    const state = {};

    actions.getUsers({ commit, state });

    expect(getters.users(state)).to.have.lengthOf(2);
  });

, когда я пытаюсь запустить тест npm run dev, он показывает console.log из действия, но из мутации SET_USERS не показывает консоль.log

Я имею в виду эту документацию, в которой я могу использовать шпиона с помощью sinon () https://vuex.vuejs.org/guide/testing.html

Как я могу получить доступ к внутреннему действию commit, чтобы вызвать мутацию SET_USERS?

1 Ответ

0 голосов
/ 06 марта 2019

По данным sinon docs

Тестовый шпион - это функция, которая записывает аргументы, возвращаемое значение, значение this и исключение (если оно есть) для всех своих вызовов. Существует два типа шпионов: некоторые являются анонимными функциями, а другие обертывают методы, которые уже существуют в тестируемой системе.

const commit = sinon.spy();

Это не «коммит» от Vuex, вы должны проверить свою мутацию индивидуально

actions.getUsers({ commit, state });

Аргумент коммита на самом деле является шпионом, он никогда не вызовет мутацию.

Чтобы проверить вашу мутацию, это может быть что-то вроде этого

mutations.SET_USERS(state, mockedUsers)
expect(state).to.have.lengthOf(mockedUsers.length)
...
...