Оболочка Vue-test-utils не проходит

#javascript #unit-testing #vue.js #vuejs2 #vue-test-utils

#javascript #модульное тестирование #vue.js #vuejs2 #vue-test-utils

Вопрос:

Я пишу этот тест для своего компонента:

   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>
  

Но тест завершается неудачно, потому что он по-прежнему показывает hidden как true, а процент равен 0, я что-то делаю не так?

Вот репозиторий

Комментарии:

1. по крайней мере, вы должны дождаться следующего тика, необходимого для обработки таких изменений: await wrapper.vm.$nextTick() (вы должны превратить свой тест в async

2. смотрите мой ответ ниже

Ответ №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')
  })

  

Комментарии:

1. Спасибо, это не сработало точно, но я заставил его работать, добавив await к самой функции. Например. await wrapper.vm.start() Следующий тик не сделал ничего другого