首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行单元测试独立Vue组合

如何进行单元测试独立Vue组合
EN

Stack Overflow用户
提问于 2020-01-28 21:50:04
回答 1查看 3.8K关注 0票数 5

我有一个类似于文档中的示例的设置,在该设置中,我的组合位于组件中的一个独立文件中,如下所示:

代码语言:javascript
复制
// composition.js
import { onMounted } from '@vue/composition-api';

export default function useComposition() {
  onMounted(() => {
    console.log('Hello, world!');
  });
}
代码语言:javascript
复制
// component.vue
<template>...</template>

<script>
import { createComponent } from '@vue/composition-api';

export default createComponent({
  setup() {
    useComposition();
  }
})
</script>

我想为composition.js文件编写一个单独的(基于Jest的)测试文件。但是,当直接调用组合时,Vue将出错(预期):

代码语言:javascript
复制
// composition.test.js

import useComposition from './composition';

describe('Composition', () => {
  it('Works', () => {
    useComposition();
    // Error: [vue-composition-api] "onMounted" get called outside of "setup()"
  });
});

为了提供一个setup()函数,我尝试过安装一个基于模拟组合API的组件,但在使其工作时遇到了一些困难:

代码语言:javascript
复制
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.
    });
});

有没有人有什么聪明的想法,如何使这一工作,以便我可以写我的模块化作文测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-01 00:08:16

错误[Vue warn]: Failed to mount component: template or render function not defined.是由于@vue/composition-api不支持在安装函数中返回呈现函数而导致的。有了这些知识,我就能够创建一个有效的模拟组件呈现函数。以下几点似乎如预期的那样有效:

代码语言:javascript
复制
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);
    });
});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59957561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档