如何在测试之间重置导入的模块

7 浏览
0 Comments

如何在测试之间重置导入的模块

假设我有一个模块,在应用程序的开始时需要初始化一次(传递配置)。模块看起来像这样:

MyModule.js

let isInitiazlied;
const myModule = {
    init: function() {
        isInitiazlied = true;
    },
    do: function() {
        if (!isInitiazlied)
            throw "error"
        //DO THINGS
    }
}
export default myModule;

我想使用jest进行单元测试。测试文件看起来像这样:

MyModule.test.js

import myModule from './MyModule'
describe('MyModule', () => {
    describe('init', () => {
        it('调用时不会抛出异常', () => {
            expect(() => myModule.init()).not.toThrow();
        });
    })
    describe('do', () => {
        it('未初始化时抛出异常', () => {
            expect(() => myModule.do()).toThrow();
        });
    })
})

当我运行测试时,第二个测试失败,因为模块已经初始化,所以异常没有被抛出。

我尝试在beforeEach中使用jest.resetModules(),但没有起作用。

有没有办法解决这个问题(不同的模块模式/测试用例)?

0