首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JEST @vue/复合-api+ Jest测试套件运行失败[vue-组合-api]必须在使用任何函数之前调用Vue.use(VueCompositionAPI)

JEST @vue/复合-api+ Jest测试套件运行失败[vue-组合-api]必须在使用任何函数之前调用Vue.use(VueCompositionAPI)
EN

Stack Overflow用户
提问于 2020-12-13 11:37:27
回答 1查看 2.2K关注 0票数 6

我使用Vue 2和@vue/composition-api插件。

我创建了一个Jest测试,但是测试失败了,错误如下:

代码语言:javascript
复制
Test suite failed to run
[vue-composition-api] must call Vue.use(VueCompositionAPI) before using any function.
      1 | import { ref } from '@vue/composition-api';
      2 | 
    > 3 | const showSidebar = ref(false);
        |                     ^
      4 | export const breakPointSize = 1250;
      5 | export const classLink = 'SidebarSectionItemRow';
      6 | export const idBtnNavbar = 'sidebarBtnNavbar';

test.spec.ts

代码语言:javascript
复制
import VueCompositionApi from '@vue/composition-api'
import { createLocalVue, mount } from '@vue/test-utils';
import MainMenuContent from '@/components/layouts/main/sidebar/menu/MainMenuContent.vue';
// create an extended `Vue` constructor
const localVue = createLocalVue()
        
// install plugins as normal
localVue.use(VueCompositionApi)
describe('MainMenuContent', () => {
  it('expect AdminSection ', () => {
    const wrapper = mount(MainMenuContent, {
      localVue,
    });
    ....
  });
});

我认为这些错误是由refsetup()函数之外造成的。sidebarControl.ts

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

const showSidebar = ref(false);

export function useControlSidebar() {
  const toggleSidebar = () => {
    showSidebar.value = !showSidebar.value;
  };
  return {
    showSidebar,
    toggleSidebar,
  };
}

有可能以某种方式解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-13 12:34:14

MainMenuContent.vue可能有顶级的sidebarControl.ts导入,在组件的setup()之外调用ref,因此在测试有机会用VueCompositionApi设置localVue之前,导入MainMenuContent.vue将触发ref调用。

解决这一问题的一种方法是将组件导入推迟到在测试中设置localVue之后:

代码语言:javascript
复制
// import MainMenuContent from '@/components/MainMenuContent.vue' // ❌ DON'T DO THIS
import { mount, createLocalVue } from '@vue/test-utils'
import VueCompositionApi from '@vue/composition-api'

describe('MainMenuContent', () => {
  it('expect AdminSection', () => {
    const localVue = createLocalVue()
    localVue.use(VueCompositionApi)

    const MainMenuContent = require('@/components/MainMenuContent.vue').default // ✅
    const wrapper = mount(MainMenuContent, { localVue })
  })
})

或者,您可以使用Jest 安装文件来使用VueCompositionApi初始化测试环境。

代码语言:javascript
复制
// jest.config.js
module.exports = {
  setupFiles: ['<rootDir>/tests/jest-setup.js']
}

// jest-setup.js
import Vue from 'vue'
import VueCompositionApi from '@vue/composition-api'

Vue.use(VueCompositionApi)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65275139

复制
相关文章

相似问题

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