bea*_*oft 5 vue.js vuex vue-test-utils
我一直在尝试对 Vue 组件进行单元测试,但我似乎无法弄清楚如何模拟/存根调用 API 异步的存储对象和方法。
这是我们拥有的 Vue 组件的示例:
import { mapState, mapGetters } from 'vuex'
import router from 'components/admin/router'
export default {
name: 'Users',
computed: {
...mapState('admin', [
'users',
]),
...mapGetters({
requestInProgress: 'requestInProgress',
}),
},
data: function() {
return {
filterTerm: '',
usersLoaded: false,
}
},
methods: {
getUsers(filter) {
this.$store.dispatch('admin/getUserList', filter)
.then(res => {
this.usersLoaded = true
})
.catch(e => {
this.$toast.error({
title: 'Failed to retrieve data',
message: this.$options.filters.normaliseError(e),
})
})
},
},
mounted() {
this.getUsers('*')
},
Run Code Online (Sandbox Code Playgroud)
}
这就是我想写的测试。我什至不能让测试干净地运行而不实际尝试断言任何东西
import Vue from 'vue'
import { shallowMount } from '@vue/test-utils'
import Users from 'components/admin/pages/user/users.vue'
describe('Users Vue', () => {
it('Page Should Load', () => {
const mockResponse = {
data: [{
"id": "1",
"emailAddress": "beakersoft@gmail.com",
"firstName": "Luke",
"lastName": "Niland",
"staffNumber": "12345",
"phoneNumber": "07707 999999",
"active": true
}
]};
let actions
let store
beforeEach(() => {
actions = {
'admin/getUserList': sinon.stub()
.returns(Promise.resolve(mockResponse))
}
store = new Vuex.Store({
state: {},
actions
})
})
const wrapper = shallowMount(Users, { store })
const h5 = wrapper.find('h5')
expect(h5.text()).toBe('User Administration')
})
})
Run Code Online (Sandbox Code Playgroud)
我倾向于返回的错误是关于未定义的项目,在这种情况下,通常$store.dispatch
是undefined
. 我觉得我在某处的嘲笑中遗漏了一些东西,或者getUsers()
被召唤到坐骑上的事实正在绊倒它。
小智 1
您必须为您的测试创建一个本地 Vue 并安装 Vuex 插件:
import { shallowMount, createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
const localVue = createLocalVue()
localVue.use(Vuex)
const wrapper = shallowMount(...)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2839 次 |
最近记录: |