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)
然后,您的组件应正确注册-
扩展chrismarx答案。
vue/nuxt以下是在应用程序中使用的示例bootstrap-vue。FormInput.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)
| 归档时间: |
|
| 查看次数: |
2231 次 |
| 最近记录: |