【发布时间】:2021-11-02 00:32:45
【问题描述】:
我在构建我的 Vue 应用程序时正在学习 TDD,并试图遵守严格的法律,即只编写足够的生产代码来满足失败的单元测试。我真的很喜欢这种方法,但是在向 Vue 实例添加方法以及测试当模板中的元素触发事件时它们是否被调用时遇到了障碍。
我找不到任何关于如何模拟 Vue 方法的建议,因为如果我模拟代理方法,它最终不会被调用(我正在使用 Jest 和 Vue 测试工具)。
我也在使用 Cypress,所以我可以在 e2e 中填写这个测试,但我希望能够尽可能多地覆盖单元测试。
我拥有 Edd Yerburgh 的《测试 Vue.js 应用程序》一书,但在有关测试组件方法的部分中,他简单地陈述了以下内容:
通常,组件在内部使用方法。例如,在单击按钮时登录到控制台 [...] 您可以将这些视为私有方法——它们不打算在组件之外使用。私有方法是实现细节,因此您不必直接为它们编写测试。
这种方法显然不允许遵循更严格的 TDD 法则,那么 TDD 纯粹主义者如何处理呢?
ButtonComponent.vue
<template>
<button @click="method">Click me</button>
</template>
<script>
export default: {
methods: {
method () {
// Have I been called?
}
}
}
</script>
ButtonComponent.spec.js
it('will call the method when clicked', () => {
const wrapper = shallowMount(ButtonComponent)
const mockMethod = jest.fn()
wrapper.vm.method = mockMethod
const button = wrapper.find('button')
button.vm.$emit('click')
expect(mockMethod).toHaveBeenCalled()
// Expected mock function to have been called, but it was not called
})
【问题讨论】:
标签: vue.js vuejs2 tdd jestjs vue-test-utils