Vue.js, мокко + чай. Как протестировать действие с запросом на сторонний API - PullRequest
0 голосов
/ 14 января 2019

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

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

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. Но у меня есть проблема с действием: в этом модуле используется библиотека с API, внутри которой есть URL-адреса на стороне сервера. Когда я запускаю тесты по каким-то причинам, использую эти URL. например Запрос выполняется на производственный сервер.

Как исправить это поведение? Как изменить эти URL-адреса в импортированном модуле 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)
  })
})

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

...