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

How to unit test Vue component that append DOM-element to HTML body?

我有一个 Vue 2.0 组件,它使用 Vuetify. I'm using the official vue-test-utils 中的 Menu 组件在测试期间安装我的组件。

我面临的问题是 Menu 组件将 "menu" 附加到 HTML-body(在组件的范围之外)。因此,我无法像使用组件中的任何其他元素那样使用 wrapper.find('.menu') 访问它。

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

更新

此时我的组件看起来非常像这样Vuetify codepen example

然后我像这样安装我的组件:

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
  })
})

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

<v-menu>
  <v-btn slot="activator"></v-btn>
  <v-card ref="menu"></v-card>
</v-menu>

然后您将能够在测试用例中通过 wrapper.vm.$refs.menu 访问该 <v-card> 组件。

如何使用 v-menu 组件的附加 属性 来在测试组件中使用菜单项?