Как найти компоненты elementUi во время модульного тестирования с использованием vue-test-utils с shallowMount?

#vue.js #jestjs #element-ui #vue-test-utils

#vue.js #jestjs #element-ui #vue-test-utils

Вопрос:

После прочтения документа vue-test-utils я пытаюсь продолжить.

Надеюсь, кто-нибудь сможет прояснить мое замешательство.

 import { mount, shallowMount } from '@vue/test-utils'
import Vue from 'vue'
import Form from '@/components/Form/index.vue'
import ElementUI from 'element-ui'

Vue.use(ElementUI)
describe('Form.vue', () => {

  //find it, pass
  it('mount', () => {
    const wrapper = mount(Form)
    const elButton = wrapper.find('.el-button')
    expect(elButton.isVueInstance()).toBe(true)
  })

  //can't find it, fail
  it('shallowMount', () => {
    const wrapper = shallowMount(Form)
    const elButton = wrapper.find('.el-button')
    expect(elButton.isVueInstance()).toBe(true)
  })
})
  

Я могу найти компоненты, предоставленные elementui, когда я использую «mount».

Но, возможно, иногда мне нужно будет использовать ‘shallowMount’.

Как я могу найти компоненты в этой ситуации?

Заранее спасибо.




Спасибо за ответ, я нашел два подхода к его исправлению:

 it('shallowMount', () => {
      const wrapper = shallowMount(Form)
      const elButton = wrapper.find(ElementUI.Button)
      expect(elButton.isVueInstance()).toBe(true)
    })
  
 it('shallowMount', () => {
      const wrapper = shallowMount(Form)
      const elButton = wrapper.find({ name: 'ElButton' })
      expect(elButton.isVueInstance()).toBe(true)
    })
  

Ответ №1:

При использовании shallowMount дочерние компоненты будут заглушены вместо отображения. Вот почему вы не можете найти его во втором тесте так, как вы это делаете.

Один из вариантов — сделать, как указано здесь: https://lmiller1990.github.io/vue-testing-handbook/stubbing-components.html#automatically-stubbing-with-shallowmount

   it('shallowMount', () => {
    const wrapper = shallowMount(Form)
    expect(wrapper.find(ElButtonComponent).exists()).toBe(true)
  })

  

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

1. Возможно ли найти el-button? Я имею в виду, может быть, что-то вроде wrapper.find('el-button') ? Потому что я просто хочу нажать на кнопку el. И я думаю, что это излишне использовать mount для рендеринга всего.

2. @Billyyyyy3320 если ваш вопрос все еще без ответа, вы можете сделать wrapper.find({ name: 'ElButton' }).vm.$emit(‘click') вместо wrapper.find('el-button').trigger('click'); , потому что el-button является самостоятельным компонентом и отключается из-за малой установки (редактирования) его родительского компонента (в данном случае формы).