如何对将DOM元素附加到HTML主体的Vue组件进行单元测试?

Chr*_*son 7 vue.js jestjs vuejs2 vuetify.js vue-test-utils

我有一个Vue 2.0组件,它使用Vuetify中的Menu组件。我正在使用官方的vue-test-utils在测试期间安装我的组件。

我面临的问题是Menu组件将“菜单”附加到HTML主体(超出组件范围)。因此,我无法wrapper.find('.menu')像访问组件中的任何其他元素一样访问它。

是否有使用vue-test-utils访问附加到主体的元素的好方法?

更新资料

这时我的组件看起来非常像这个Vuetify Codepen示例

然后我将组件安装成这样:

import Vuex from 'vuex'
import Vuetify from 'vuetify'
import AuthenticatedUser from './AuthenticatedUser'
import { mount, createLocalVue } from 'vue-test-utils'

const localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(Vuetify)

describe('AuthenticatedUser', () => {
  let getters
  let store

  beforeEach(() => {
    getters = {
      getUserDetails: () => { name: 'John Doe' }
    }

    store = new Vuex.Store({ getters })
  })

  it('should open menu when button is clicked', () => {
    const wrapper = mount(AuthenticatedUser, { store, localVue })

    // In here 'wrapper' won't have access to the dropdown menu,
    // since it has been added directly to the HTML body
  })
})
Run Code Online (Sandbox Code Playgroud)

tha*_*ksd 5

在组件定义中,将ref属性添加到菜单的内容中,以您的情况<v-card>为例:

<v-menu>
  <v-btn slot="activator"></v-btn>
  <v-card ref="menu"></v-card>
</v-menu>
Run Code Online (Sandbox Code Playgroud)

然后,您将可以<v-card>通过wrapper.vm.$refs.menu测试用例访问该组件。

  • 嗨@VivekVikranth,我一直在努力进行类似的测试,您是否找到了触发菜单项点击的方法? (3认同)
  • @thanksd我可以访问`wrapper.vm.$refs.menu`,但是如果我想触发菜单项的点击,该怎么做? (2认同)
  • 也有这个问题。希望能够获取 refs 的 DOM 内容并触发它们的事件,不确定这是否可能 (2认同)