如何测试 vuex 操作,其中 jest 里面有一个 api 调用?

Posted

技术标签:

【中文标题】如何测试 vuex 操作,其中 jest 里面有一个 api 调用?【英文标题】:How can I test vuex action which with jest which has an api call inside it? 【发布时间】:2019-08-09 13:25:45 【问题描述】:

ASYNC ACTION VUEX :这是异步操作,将从 组件,它由一个函数 fetchGaragesData 组成,它将使 从服务器获取数据的 api 调用。

[ACTION_TYPES.FETCH_CASHLESS_GARAGES]: async (
         dispatch, commit, state, rootState ,
        payload
    ) => 
        commit(MUTATION_TYPES.SET_MISC_KEYS, 
            fetchingCashlessGaragesInitiated: true,
        )
        let  insurerSlug, makeId, rtoCode  = payload
        const url = ApiUrls.getCashlessGarages + `$insurerSlug/$makeId`
        const response = await fetchGaragesData(url, rtoCode)
        dispatch(ACTION_TYPES.MODIFY_RTO_WISE_GARAGES_DATA, response)
    ,

fetchGaragesData 的实现:此函数在内部调用 axios 获取:

export const fetchGaragesData = (url: string, rtoCode: string) => 
    return get(url, 
        rto_code: rtoCode,
        all_states_data: true,
    )

如何测试操作 ACTION_TYPES.FETCH_CASHLESS_GARAGES ???

【问题讨论】:

【参考方案1】:

您可能有 API 模拟响应。因此,在您的规范文件中,您需要为该特定 API 调用添加模拟响应。

将您的文件包含在具有实际后端 API 调用的规范文件中。 例如:

import someName from 'path of file'

jest.mock('someName', () => (
 fetchGaragesData: jest.fn((url, rtoCode) =>
  success( body: 
    Here comes your response body
 )
)

url 和 rtoCode 应该是 API 调用文件中使用的变量的名称。

【讨论】:

以上是关于如何测试 vuex 操作,其中 jest 里面有一个 api 调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Nuxt 和 Jest 在 Vuex 商店测试中访问 this.app 和/或注入插件

在 vue-multiselect 中测试 vuex 操作时调用了 Jest 预期的模拟函数

使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取“在 mapState() 中找不到 [vuex] 模块命名空间”和“[vuex] 未知操作类型”

如何使用 vue-test-utils 和 Jest 在 Nuxt 中对使用 vuex-module-decorators 语法定义的 Vuex 模块进行单元测试?

如何在带有 vuetify 和 vuex 的 Vuejs 项目中使用 Jest?节点模块和 Vuetify 问题

使用 Jest 测试 Nuxt + Vuex + Vuetify 的设置