Vue.js @Vue/测试utils shallowMount输出;[Vue warn]:未知自定义元素“;用于vuetify组件
Vue中的我的单元测试不仅为Vue.js @Vue/测试utils shallowMount输出;[Vue warn]:未知自定义元素“;用于vuetify组件,vue.js,mocha.js,vuetify.js,vue-test-utils,Vue.js,Mocha.js,Vuetify.js,Vue Test Utils,Vue中的我的单元测试不仅为而且为每个vuetify组件输出以下警告: [Vue warn]:未知自定义元素:-是否注册了 组件是否正确?对于递归组件,请确保提供 “名称”选项 我创建了一个localVue并添加了Vuetify,但这似乎不起作用。这是我的测试用例: import { shallowMount, createLocalVue } from '@vue/test-utils' import expect from 'expect' import ProjetoShow from '
而且为每个vuetify组件输出以下警告:
[Vue warn]:未知自定义元素:localVue
并添加了Vuetify
,但这似乎不起作用。这是我的测试用例:
import { shallowMount, createLocalVue } from '@vue/test-utils'
import expect from 'expect'
import ProjetoShow from '../../views/Projeto/ProjetoShow.vue'
import Vuetify from 'vuetify'
describe('ProjetoShow component', () => {
let wrapper
let localVue
beforeEach(() => {
localVue = createLocalVue()
localVue.use(Vuetify)
})
it('renders correctly', ()=> {
let vuetify = new Vuetify()
wrapper = shallowMount(ProjetoShow, {localVue, vuetify})
expect(wrapper.find('h2').text()).toContain('PROJETO')
})
})
我的包在package.json中的版本
"devDependencies": {
"@vue/test-utils": "^1.0.0-beta.31",
"axios": "^0.19.0",
"cross-env": "^5.1",
"expect": "^24.9.0",
"jsdom": "^15.1.1",
"jsdom-global": "^3.0.2",
"laravel-mix": "^4.0.7",
"lodash": "^4.17.13",
"mocha": "^6.2.0",
"mochapack": "^1.1.5",
"resolve-url-loader": "^2.3.1",
"sass": "^1.15.2",
"sass-loader": "^7.1.0",
"vue": "^2.5.17",
"vue-template-compiler": "^2.6.10"
},
"dependencies": {
"vue-router": "^3.1.3",
"vuetify": "^2.2.15",
"vuex": "^3.1.1"
},
在Vuetify的文档中,他们在描述块中声明让Vuetify
,然后在每个之前的中,将该变量分配给一个新Vuetify()
我看不到您在测试代码中的任何地方实际初始化Vuetify,所以这里可能需要这样做。我犯了一个错误,将Vuetify添加到localVue
而不是Vue
。这改变了它。根据使用的版本,这仍然可能输出一些错误。如果出现问题,请将vuetify
、@vue/test-utils
和mocha
更新到最新版本
import { shallowMount, createLocalVue } from '@vue/test-utils'
import expect from 'expect'
import ProjetoShow from '../../views/Projeto/ProjetoShow.vue'
import Vuetify from 'vuetify'
import VueRouter from 'vue-router'
import Vue from 'vue'
Vue.use(Vuetify)
describe('ProjetoShow component', () => {
let wrapper
let localVue
beforeEach(() => {
localVue = createLocalVue()
localVue.use(VueRouter)
})
it('renders correctly', ()=> {
let router = new VueRouter()
let vuetify = new Vuetify()
wrapper = shallowMount(ProjetoShow, {localVue, router, vuetify})
expect(wrapper.find('h2').text()).toContain('PROJETO')
})
})
我找到了两种不同的解决方案:
第一,在测试文件中注册vuetify(目前我还没有找到全局声明的方法)
第二,使用特定的vuetify组件向包装器添加存根
wrapper = shallowMount(ProjetoShow, {stubs: ['v-col']})
编辑,我发现全局声明的解决方案是必要的,在tests文件夹中创建一个文件setup.js
,并在测试配置文件中添加路径,如果在jest.config.js中添加setupFiles:['./tests/setup.js']
我在vuetify docs中尝试了该解决方案,但它仍然不起作用。您是否能够像现在这样用您的项目创建一个公共git回购?或者更确切地说,只是相关文件?它现在起作用了。我犯了一个错误,将Vuetify添加到localVue而不是Vue实例。Vuetify文档是正确的。我更改了localVue。使用(Vuetify)从“Vue”导入Vue;Vue.use(Vuetify)@马塞洛丰塞卡很高兴你能弄明白。请将该信息发布为答案,并将其标记为已接受,以便任何其他遇到此问题的人都可以快速获得答案。快乐编码!我一直试图将其传递到我的安装文件,但没有成功。它向我提供了错误UnhandledPromisejectionWarning和SyntaxError:从“Vuetify”导入Vuetify的意外标识符。不知道为什么要从“Vuetify/lib”导入Vuetify,所以我在插件文件中有它,但在setup.js中不适用于我,请在测试文件中将它声明为有效,它应该有效。。
wrapper = shallowMount(ProjetoShow, {stubs: ['v-col']})