Vue.js 为每个jest测试重置Vue?

Vue.js 为每个jest测试重置Vue?,vue.js,jestjs,vue-test-utils,Vue.js,Jestjs,Vue Test Utils,我将Vue JS与@Vue/test utils和jest一起使用。对于我的测试,我打电话: let localVue = createLocalVue(); vueMount(MyComponent, { localVue: localVue, options }); 问题是,我引用的库的内容如下: import Vue from 'vue' import Msal from 'vue-msal' //... Vue.use(Msal, {...}); use()在原型上注册一些全局内容,

我将Vue JS与@Vue/test utils和jest一起使用。对于我的测试,我打电话:

let localVue = createLocalVue();
vueMount(MyComponent, { localVue: localVue, options });
问题是,我引用的库的内容如下:

import Vue from 'vue'
import Msal from 'vue-msal'
//...
Vue.use(Msal, {...});
use()在原型上注册一些全局内容,等等。出于测试目的,我需要它来重新开始每个测试。我唯一能想到的就是在Vue对象上使用mockImplementation()和jest。但如果可能的话,我不太确定如何才能做到这一点


有没有办法做到这一点?谢谢

我花了一段时间,但下面是我如何解决这个问题的

让setupComplete=false;
让失败=错误;
让testContext={};
函数resetTestContext(){
Object.keys(testContext).forEach(函数(键){delete testContext[key];});
}
函数createTestContext(configureTestContext){
在每个之前(()=>{
jest.IsolateModule(()=>{
setupFailure=true;
开玩笑,开玩笑(“vue”);
resetTestContext();
testContext.vueTestUtils=require(“@vue/test-utils”);
testContext.vue=testContext.vueTestUtils.createLocalVue();
doMock('vue',()=>testContext.vue);
testContext.vuetify=require('vuetify');
testContext.vue.use(testContext.vuetify);
testContext.vuetifyInstance=新建testContext.vuetify();
if(configureTestContext){
configureTestContext(testContext);
}
setupComplete=true;
设置失败=错误;
});
});
之后(()=>{
setupComplete=false;
resetTestContext();
jest.reset模块();
设置失败=错误;
});
返回testContext;
},
使这成为可能的是jest.isolateModules()方法。通过这种方法,Vue及其原型,以及Vuetify,在每个测试用例中都被完全重新创建和全新

要使其工作,测试规范和包含上述实用程序的库不能“导入”Vue或任何依赖Vue的模块。相反,它需要在configureTestContext()函数中或在测试用例本身中是必需的

我的测试规格如下所示:

import Vue from 'vue'
import Msal from 'vue-msal'
//...
Vue.use(Msal, {...});
从'@/scripts/createTestContext'导入createTestContext'
描述('sample',()=>{
const testContext=createTestContext(函数configureTestContext(testContext))
{
testContext.vueDependency=require('@/scripts/vueDependency')。默认值;
});
测试('demo',()=>{
//我添加了一个助手,以便在测试上下文中更轻松地执行此操作。。。
const sample=testContext.vueTestUtils.mount(需要('@/components/sample')。默认值{
localVue:testContext.vue,
vuetify:testContext.vuetifyInstance
});
expect(testContext.vueDependency.doSomething(示例)).toBe(true);
expect(sample.isVueInstance()).toBeTruthy();
});
});

Local Vue用于独立单元测试。如果您想在单元测试中使用所有第三方LIB(顺便说一句,这不是一个好的测试策略),本地Vue就没有用了。感谢您提供此代码片段,它可能会提供一些有限的即时帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设。