gpt4 book ai didi

vue.js - 如何对独立的 Vue 组合进行单元测试

转载 作者:行者123 更新时间:2023-12-03 06:40:48 26 4
gpt4 key购买 nike

我有一个类似于 the example in the docs 的设置我的作品与我的组件位于一个单独的文件中,如下所示:

// 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()"
});
});

我已尝试安装基于模拟组合 API 的组件以提供 setup()功能,但在让它工作时遇到了一些麻烦:

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

有没有人有任何关于如何让它工作的好主意,以便我可以为我的模块化组合编写测试?

最佳答案

错误 [Vue warn]: Failed to mount component: template or render function not defined.是由于 @vue/composition-api不支持在 setup 函数中返回渲染函数。有了这些知识,我就能够创建一个有效的模拟组件渲染函数。以下似乎按预期工作:

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

关于vue.js - 如何对独立的 Vue 组合进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59957561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com