【问题标题】:Vue-test-utils wrapper not passingVue-test-utils 包装器未通过
【发布时间】:2020-10-15 17:42:53
【问题描述】:

我正在为我的组件编写这个测试:

  test('display the bar when start is called', () => {
    const wrapper = shallowMount(ProgressBar)
    expect(wrapper.classes()).toContain('hidden')
    wrapper.vm.start()
    console.log(wrapper.vm.hidden) // false
    console.log(wrapper.vm.start()) // undefined
    expect(wrapper.classes()).not.toContain('hidden')
  })

  test('sets the bar to 100% width when the finish is called', () => {
    const wrapper = shallowMount(ProgressBar)
    expect(wrapper.element.style.width).toBe('0%')
    wrapper.vm.start()
    wrapper.vm.finish()
    expect(wrapper.element.style.width).toBe('100%')
  })

在我的 ProgressBar 组件中,我有:

<template>
  <div :class="{ hidden: hidden }" :style="{ width: `${percent}%` }"
></div>
</template>

<script>
export default {
  data () {
    return {
      hidden: true,
      percent: 0
    }
  },
  methods: {
    start () {
      this.hidden = false
    },
    finish () {
      this.percent = 100
      this.hidden = true
    }
  }
}
</script>

但是测试失败了,因为它仍然显示隐藏为真,百分比为 0,是我做错了什么吗?

这里是repo

【问题讨论】:

  • 至少你应该等待处理修改所需的下一个滴答声:await wrapper.vm.$nextTick()(你应该把你的测试变成async
  • 在下面查看我的答案

标签: javascript unit-testing vue.js vuejs2 vue-test-utils


【解决方案1】:

您应该等待处理修改所需的下一个滴答声,如下所示: await wrapper.vm.$nextTick()

test('display the bar when start is called', async () => {
    const wrapper = shallowMount(ProgressBar)
    expect(wrapper.classes()).toContain('hidden')
    wrapper.vm.start()

    await wrapper.vm.$nextTick()

    console.log(wrapper.vm.hidden) // false
    console.log(wrapper.vm.start()) // undefined
    expect(wrapper.classes()).not.toContain('hidden')
  })

【讨论】:

  • 谢谢,它并不能完全正常工作,但我通过将 await 添加到函数本身来让它工作。例如。 await wrapper.vm.start()nextTick 没有做任何不同的事情
猜你喜欢
  • 2019-03-07
  • 2019-03-13
  • 2021-05-26
  • 2018-04-05
  • 2019-11-19
  • 2019-10-24
  • 2019-02-15
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多