【发布时间】:2023-11-17 06:13:01
【问题描述】:
按照documentation,我编写了一个包含以下逻辑的Vue组件:
import debounce from 'lodash/debounce'
export default {
[...]
created () {
this.debouncedOnSubmit = debounce(this.doSubmit, 1000)
},
[...]
这背后的想法是我的表单在提交表单时调用debouncedOnSubmit方法:
<button
name="order-basket"
type="submit"
@click.prevent="debouncedOnSubmit"
>
Click me!
</button>
现在,该代码在我的应用程序以及我的笑话测试中都可以正常工作。例如,使用 vue 测试工具,我可以在该按钮上触发 click 事件,并且可以成功验证单击该按钮时应该发生的相关事情。
但是,我收到以下烦人的警告:
[Vue warn]: Error in v-on handler: "TypeError: _vm.debouncedOnSubmit is not a function"
我部分理解为什么会收到该警告。事实上,我在 created() 钩子中定义了 this.debouncedOnSubmit。即使debounce 方法返回一个函数,Jest 也很可能不理解该变量的含义。
如何让 jest 明白debouncedOnSubmit 是一个函数?我需要配置什么?
我不想禁用警告,正如here 解释的那样,因为我确实想在我的测试中保留对我的行为的反馈。大多数时候,这些警告真的很有帮助,我对关闭它们的想法感到不舒服。如何编写代码以修复此警告?
编辑
- 变化
@click.prevent="debouncedOnSubmit"
到
@click.prevent="debouncedOnSubmit()"
对问题没有任何改变
- 将
debouncedOnSubmit从created()挂钩移动到computed这样的东西
debouncedOnSubmit: debounce(this.doSubmit, 1000)
抛出错误
TypeError: Cannot read property 'doSubmit' of undefined
- 变化
@click.prevent="debouncedOnSubmit"
到
@click.prevent="debouncedOnSubmit()"
和将 debouncedOnSubmit 从 created() 挂钩移动到 computed 这样的东西
debouncedOnSubmit () {
const submit = this.doSubmit
return debounce(submit, 1000)
}
仍然使我的应用程序和测试正常工作,但在我的开玩笑测试中仍然得到相同的警告:
[Vue warn]: Error in v-on handler: "TypeError: _vm.debouncedOnSubmit is not a function"
【问题讨论】:
-
你试过用 () 例如调用它吗? @click.prevent="debouncedOnSubmit()",如果不起作用,可能会将其转换为计算函数
-
有一个非常相似的问题。你的解决方案是什么?我试图在计算的函数中返回 $this.store.state.modules.post.image。它来自一个 vue-croppa::initial-image="getImage"。方法中的 getImage、getImage.image 甚至 getimage() 仍然会返回此错误。
-
我仍然无法解决这个问题。没有什么可以“干净”地工作。目前,该应用程序工作正常,测试通过,但我仍然有那个烦人的错误消息。
标签: javascript vue.js testing jestjs vue-test-utils