【发布时间】:2019-04-18 23:29:30
【问题描述】:
一个简单的组件:
<template>
<div>
<p>
{{ count }}
</p>
<button @click="increment" data-test="increment">Increment</button>
</div>
</template>
<script>
export default {
data () {
return {
count: 0
}
},
methods: {
increment () {
this.count++
}
}
}
</script>
我的测试:
import TestExperiment from '@/components/TestExperiment'
import { createLocalVue, shallowMount } from '@vue/test-utils'
const localVue = createLocalVue()
describe('testexperiment.test.js', () => {
const cmp = shallowMount(TestExperiment, {
localVue
})
const increment = jest.spyOn(cmp.vm, 'increment')
const incrementButton= cmp.find('[data-test="increment"]')
test('clicking increment button calls increent', () => {
expect(incrementButton.exists()).toBe(true)
incrementButton.trigger('click')
// Checking call here fails:
// expect(increment).toHaveBeenCalled()
// Function was still obviously called
expect(cmp.vm.count).toBe(1)
incrementButton.trigger('click')
// Checking call here passes:
expect(increment).toHaveBeenCalled()
})
})
如您所见,我触发了对 incrementButton 的点击两次。
第一次调用后,如果我测试是否调用了方法“increment”,它会返回 false。但是,计数确实增加了。在第二次调用之后,它记录了它实际上被调用了(如果我测试它被调用了多少次,它断言它被调用了一次,即使 count 是 2,显然已经增加了两次)。
关于 Jest/Vue 的工作原理,我缺少什么?
【问题讨论】:
标签: vue.js jestjs vue-test-utils