用Bootstrap-Vue玩笑

Fre*_*ezy 7 javascript jestjs vuejs2 vue-cli bootstrap-vue

我最近一直在使用vuejs和bootstrap-vue。决定将单元测试添加到我的项目中。

我对单元测试不是很熟悉,因此我正在尝试尝试发现的一切以了解其工作原理。

Login.specs.js

import { shallowMount, mount } from '@vue/test-utils'
import Login from '@/components/auth/Login.vue'

describe('Login.vue', () => {
  it('is a Vue instance', () => {
   const wrapper = mount(Login, {
    mocks: {
     $t: () => 'Connexion' // i18N
    }
   })
  const h2 = wrapper.find('h2')
  expect(h2.text()).toBe('Connexion')
 })
})
Run Code Online (Sandbox Code Playgroud)

Login.vue

<b-row align-h="center">
 <b-col class="text-center">
  <h2>{{ $t('login.connection') }}</h2>
 </b-col>
</b-row>
Run Code Online (Sandbox Code Playgroud)

测试似乎一切正常。但是我发现了这些缺陷,并且可以找到一种方法来进行实际修复。

[Vue警告]:未知的自定义元素:-您是否正确注册了组件?对于递归组件,请确保提供“名称”选项。

[Vue警告]:未知的自定义元素:-您是否正确注册了组件?对于递归组件,请确保提供“名称”选项。

因此,我环顾四周,似乎需要将这些子组件添加到父亲中。

这是这些组件的文档

我还添加了我的配置文件(与vue-cli 3生成的文件相同)

jest.congif.js

module.exports = {
  moduleFileExtensions: [
  'js',
  'jsx',
  'json',
  'vue'
 ],
 transform: {
  '^.+\\.vue$': 'vue-jest',
  '.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest- transform-stub',
  '^.+\\.jsx?$': 'babel-jest'
 },
 moduleNameMapper: {
  '^@/(.*)$': '<rootDir>/src/$1'
 },
 snapshotSerializers: [
  'jest-serializer-vue'
 ],
 testPathIgnorePatterns: [ //I've added this one, not sure if usefull
  '<rootDir>/node_modules'
 ],
 testMatch: [
  '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
 ]
}
Run Code Online (Sandbox Code Playgroud)

chr*_*arx 11

如果要添加bootstrap vue作为全局插件:

Vue.use(BootstrapVue);
Run Code Online (Sandbox Code Playgroud)

然后在您的测试中,您可能需要遵循以下提示:

https://vue-test-utils.vuejs.org/guides/common-tips.html#applying-global-plugins-and-mixins

其中概述了如何使用createLocalVue()和使用与您的应用相同的全局配置进行设置:

import { createLocalVue } from '@vue/test-utils'

// create an extended `Vue` constructor
const localVue = createLocalVue()

// install plugins as normal
localVue.use(BootstrapVue)

// pass the `localVue` to the mount options
mount(Component, {
  localVue
})
Run Code Online (Sandbox Code Playgroud)

然后,您的组件应正确注册-

  • 谢谢 !工作了! (3认同)
  • 我面临着同样的问题,即使在像这样全局安装 BootstrapVue 插件之后 **localVue.use(BootstrapVue)** 测试运行也会在控制台中打印警告“未知的自定义元素:&lt;b-alert&gt; - 您是否正确注册了组件?对于递归组件,请确保提供“名称”选项。” 如何修复它?@巴图斯扎克 (2认同)

jtl*_*sey 6

扩展chrismarx答案。

vue/nuxt以下是在应用程序中使用的示例bootstrap-vueFormInput.vue在测试包含来自 的一些元素的组件时bootstrap-vue,我遇到了类似Unknown custom element: <b-form-input>Unknown custom element: <b-col>的错误Unknown custom element: <b-row>

文档展示了使用插槽和自定义组件的示例。我做了以下事情来克服我的错误。请注意bootstrap-vue导入和stubs部分:

import { /* mount, */ shallowMount } from '@vue/test-utils'
import { BRow, BCol, BFormInput } from 'bootstrap-vue'
import FormInput from './FormInput.vue'

describe('FormInput test', () => {
  test('is a Vue instance', () => {
    const wrapper = shallowMount(FormInput, {
      stubs: {
        // used to register custom components
        'b-form-input': BFormInput,
        'b-row': BRow,
        'b-col': BCol,
      },
    })
    expect(wrapper.vm).toBeTruthy()
  })
})

Run Code Online (Sandbox Code Playgroud)


小智 5

也可以存根组件,例如

const wrapper = mount(Login, {
  mocks: {
    $t: () => 'Connexion' // i18N
  },
  stubs: {
    BCol: true
  }
});
Run Code Online (Sandbox Code Playgroud)