Vue.js, mocha+chai. Как протестировать action c запросом на стороннее АПИ

117
09 августа 2019, 06:40

День добрый. Может ли мне кто-нибудь подсказать, как протестировать асинхронный action в хранилище?

Имеется такой модуль хранилища (упрощенно):

import API_Library from '@/API'
import * as types from './mutation-types.js'

export default: {
  state: {
    items: []
  },
  getters: {
    getItems: state => {
      return state.items
    }
  },
  mutations: {
    [types.GET_ITEMS]: (state, data) => {
      state.items = data
    }
  },
  actions: {
    [types.GET_ITEMS]: async (state) => {
      const ResponseData = await API_Library.feeds.feedUrls.list()
      state.commit(types.GET_ITEMS, ResponseData)
      return(true)
    }
  }
}

Все части этого модуля я протестировал успешно с помощью Mocha+Chai. Но с действием возникла проблема, которая заключается в том, что в данном модуле импортируется библиотека для апи, в методы которой уже зашиты урлы. И при прогонке теста используются как раз эти урлы. То есть запрос идет на сервер.

Как это исправить? Или как подменить эту переменную внутри импортируемого модуля Vuex?

Вот сам тест:

import Vuex from '@/store/siteStorage/itemsList'
import * as types from './mutation-types.js'
import { expect } from 'chai'
import { flushPromises } from 'flushPromises'
describe('Tests for Vuex', () => {
  it('Test for items list', () => {
    let testData = [1, 2, 3]
    const State = {
      state: {
        items: []
      },
      commit (name, data) {
        this.state.feeds = data
      }
    }
    Vuex.actions[types.GET_ITEMS](State)
    await flushPromises()
    expect(State.state.items).to.deep.equal(testData)
  })
})

Вроде и все подменил, и расписал как надо, а запрос идет на сервер. Или я чего-то не понимаю?

READ ALSO
Передача данных в класс [дубликат]

Передача данных в класс [дубликат]

На данный вопрос уже ответили:

142
Extjs loadmask + store.filter

Extjs loadmask + store.filter

Имеется текстовое поле, в которое вводится значение, по которому фильтруется store, тк

140
D3 не хочет перерисовывать

D3 не хочет перерисовывать

Друзья, помогите пожалуйста!

121
Включить клик js в ссылку

Включить клик js в ссылку

На одной странице сайта есть ссылка-спойлер, то есть при клике на нее под ней появляется блок: с помощью js кода идет подмена стиля с display:none...

129