Vue.js 如何在Vuex模块中测试操作?
我想测试一个名为user的vuex模块 最初,我成功地将模块注册到Vuex。它的工作如预期Vue.js 如何在Vuex模块中测试操作?,vue.js,jestjs,vue-test-utils,Vue.js,Jestjs,Vue Test Utils,我想测试一个名为user的vuex模块 最初,我成功地将模块注册到Vuex。它的工作如预期 // store/index.js import Vue from 'vue' import Vuex from 'vuex' import user from './modules/user' Vue.use(Vuex) const store = new Vuex.Store({ modules: { user } }) export default store 我的用户模块
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user
}
})
export default store
我的用户模块定义如下
store/modules/user.js
const state = {
token: getToken() || '',
}
export const getters = {
token: state => state.token,
}
const mutations = {
[SET_TOKEN]: (state, token) => {
state.token = token
}
}
const actions = {
[LOGIN] ({ commit }, body) {
return new Promise((resolve, reject) => {
login(body).then(response => { //login is an api method, I'm using axios to call it.
const { token } = response.data
setToken(token)
commit(SET_TOKEN, token)
resolve()
}).catch(error => {
reject(error)
})
})
}
}
export default {
state,
getters,
mutations,
actions
}
登录api
api/auth.js
import request from '@/utils/request'
export function login (data) {
return request({
url: '/auth/login',
method: 'post',
data
})
}
axios请求文件
utils/request
import axios from 'axios'
import store from '@/store'
import { getToken } from '@/utils/auth'
const request = axios.create({
baseURL: process.env.VUE_APP_BASE_API_URL,
timeout: 5000
})
request.interceptors.request.use(
config => {
const token = getToken()
if (token) {
config.headers['Authentication'] = token
}
return config
}
)
export default request
当我想编写一些测试时(使用Jest),例如上面显示的登录操作
// user.spec.js
import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import actions from '@/store/modules/user'
const localVue = createLocalVue()
localVue.use(Vuex)
test('huhu', () => {
expect(true).toBe(true)
// implementation..
})
如何为登录操作编写测试?谢谢对不起,我的初学者问题
编辑:谢谢Raynhour为我指明了正确的方向:)
存储它只是一个将导出对象的javascript文件。不需要使用vue测试工具
import actions from '../actions'
import flushPromises from 'flush-promises'
jest.mock('../api/auth.js', () => {
return {
login: jest.fn()..mockResolvedValue('token')
}; // mocking API.
describe('actions', () => {
test('login should set token', async () => {
const context = {
commit: jest.fn()
}
const body = {
login: 'login',
password: 'password'
}
actions.login(context, body)
await flushPromises() // Flush all pending resolved promise handlers
expect(context.commit).toHaveBeenCalledWith('set_token', 'token')
})
})
但您需要记住,在单元测试中,所有异步请求都必须模拟(使用jest.mock或其他方式)
import actions from '../actions'
import flushPromises from 'flush-promises'
jest.mock('../api/auth.js', () => {
return {
login: jest.fn()..mockResolvedValue('token')
}; // mocking API.
describe('actions', () => {
test('login should set token', async () => {
const context = {
commit: jest.fn()
}
const body = {
login: 'login',
password: 'password'
}
actions.login(context, body)
await flushPromises() // Flush all pending resolved promise handlers
expect(context.commit).toHaveBeenCalledWith('set_token', 'token')
})
})