我有一个类似于文档中的示例的设置,在该设置中,我的组合位于组件中的一个独立文件中,如下所示:
// composition.js
import { onMounted } from '@vue/composition-api';
export default function useComposition() {
onMounted(() => {
console.log('Hello, world!');
});
}// component.vue
<template>...</template>
<script>
import { createComponent } from '@vue/composition-api';
export default createComponent({
setup() {
useComposition();
}
})
</script>我想为composition.js文件编写一个单独的(基于Jest的)测试文件。但是,当直接调用组合时,Vue将出错(预期):
// composition.test.js
import useComposition from './composition';
describe('Composition', () => {
it('Works', () => {
useComposition();
// Error: [vue-composition-api] "onMounted" get called outside of "setup()"
});
});为了提供一个setup()函数,我尝试过安装一个基于模拟组合API的组件,但在使其工作时遇到了一些困难:
import { mount, createLocalVue } from '@vue/test-utils';
import VueCompositionAPI, { createComponent } from '@vue/composition-api';
import useComposition from './composition';
const localVue = createLocalVue();
localVue.use(VueCompositionAPI);
describe('Composition', () => {
it('Works', () => {
const mockComponent = createComponent({
setup() {
useComposition();
return h => h('div');
}
});
mount(mockComponent, { localVue });
// [Vue warn]: Failed to mount component: template or render function not defined.
});
});有没有人有什么聪明的想法,如何使这一工作,以便我可以写我的模块化作文测试?
发布于 2020-02-01 00:08:16
错误[Vue warn]: Failed to mount component: template or render function not defined.是由于@vue/composition-api不支持在安装函数中返回呈现函数而导致的。有了这些知识,我就能够创建一个有效的模拟组件呈现函数。以下几点似乎如预期的那样有效:
import VueCompositionAPI from '@vue/composition-api';
import { mount, createLocalVue } from '@vue/test-utils';
const localVue = createLocalVue();
localVue.use(VueCompositionAPI);
const mountComposition = (cb: () => any) => {
return mount(
{
setup() {
return cb();
},
render(h) {
return h('div');
}
},
{ localVue }
);
};
describe('My Test', () => {
it('Works', () => {
let value;
const component = mountComposition(() => {
value = useComposition();
});
expect(value).toBe(true);
});
});https://stackoverflow.com/questions/59957561
复制相似问题