Pay*_*ari 7 javascript vue.js jestjs vuetify.js vue-test-utils
我有一个带按钮的 Vue 组件。单击按钮时,将调用一个方法。我正在使用 Jest 进行单元测试。我期望在按钮上创建合成事件的.trigger方法vue-test-utils,但它什么也不做。
我尝试通过调用wrapper.vm.addService()然后使用直接在包装器上调用该方法console.log(wrapper.emitted()),我确实可以看到一个事件已被触发。所以我的问题是为什么addServiceBtn.trigger('click')不做任何事情。
的console.log(wrapper.emitted())是一个空对象。测试结果失败并显示错误消息:Expected spy to have been called, but it was not called.
服务项.vue
<template>
<v-flex xs2>
<v-card>
<v-card-text id="itemTitle">{{ item.title }}</v-card-text>
<v-card-actions>
<v-btn flat color="green" id="addServiceBtn" @click="this.addService">Add</v-btn>
</v-card-actions>
</v-card>
</v-flex>
</template>
<script>
export default {
data: () => ({
title: ''
}),
props: {
item: Object
},
methods: {
addService: function (event) {
console.log('service item')
this.$emit('add-service')
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
测试规范.js
import { shallowMount, mount } from '@vue/test-utils'
import ServiceItem from '@/components/ServiceItem.vue'
import Vue from 'vue';
import Vuetify from 'vuetify';
Vue.use(Vuetify);
describe('ServiceItem.vue', () => {
it('emits add-service when Add button is clicked', () => {
const item = {
title: 'Service'
}
const wrapper = mount(ServiceItem, {
propsData: { item }
})
expect(wrapper.find('#addServiceBtn').exists()).toBe(true)
const addServiceBtn = wrapper.find('#addServiceBtn')
const spy = spyOn(wrapper.vm, 'addService')
console.log(wrapper.emitted())
addServiceBtn.trigger('click')
expect(wrapper.vm.addService).toBeCalled()
})
})
Run Code Online (Sandbox Code Playgroud)
你的 HTML 代码有点错误。您将@click事件绑定到您的方法,没有任何this. 做了:
<v-btn flat color="green" id="addServiceBtn" @click="addService($event)">Add</v-btn>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11254 次 |
| 最近记录: |