javascript - Vue Test Utils - 触发点击事件后数据不更新

标签 javascript vue.js vuejs2 vue-test-utils

我使用 Vue Test Utils 进行了这个基本测试:

import { mount } from '@vue/test-utils'

const App = {
  template: `
    <p>Count: {{ count }}</p>
    <button @click="handleClick">Increment</button>
  `,
  data() {
    return {
      count: 0
    }
  },
  methods: {
    handleClick() {
      this.count += 1
    }
  }
}

test('it increments by 1', async () => {
  const wrapper = mount(App, {
    data() {
      return {
        count: 0
      }
    }
  })
  expect(wrapper.html()).toContain('Count: 0')
  await wrapper.find('button').trigger('click')
  expect(wrapper.html()).toContain('Count: 1')
})

只有满足以下任一条件,测试才会通过

  • 不要向 mount 方法发送任何自定义数据,或者
  • 触发事件后,使用 wrapper.vm.$forceUpdate() 强制重新渲染。

但是,根据 documentation ,难道不应该像已经写好的那样直接通过吗?

最佳答案

测试没问题,在vue2中你必须给模板添加一个root。组件模板应该只包含一个根元素。

<div>
    <p>Count: {{ count }}</p>
    <button @click="handleClick">Increment</button>
</div>

关于javascript - Vue Test Utils - 触发点击事件后数据不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65482201/

相关文章:

javascript - 从 JavaScript 检索自定义属性(使用 Javascript 适配器)Keycloak

javascript - 按元素名称中的索引选择元素

javascript - 如何在 Vuex 中设计一个商店来处理嵌套自定义组件中的点击?

vue.js - 推送和更改项目时 Vuejs 列表不会重新呈现

javascript - 自动更新表单中的输入字段,vue.js

vue.js - 如何将带有内容的组件传递给 Vue-grid-layout 中的 GridItem?

javascript - 正则表达式仅接受名称和数字

javascript - 当元素位于屏幕顶部时向元素添加类

vue.js - 检查登录状态,如果未登录则渲染覆盖图,如果登录成功则继续

vue.js - 具有 v-once 效果的功能组件