#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 является самостоятельным компонентом и отключается из-за малой установки (редактирования) его родительского компонента (в данном случае формы).