多次使用不同值模拟Jest模块

7 浏览
0 Comments

多次使用不同值模拟Jest模块

我有一个想要测试的函数,这个函数使用了一个导入的模块:

var a = require('./a');
function add(b) {
  return a + b;
}
module.exports = add;

在这个示例中,a模块返回一个数字,但在我的真实项目中,我将其用作一个配置对象,该对象会不时手动更改。

var a = 1;
module.exports = a;

对于add函数的测试如下所示:

describe('add', () => {
  it('should add the mock number 1 to 2', () => {
    jest.setMock('./a', 1);
    const add = require('./add');
    expect(add(2)).toBe(3);
  });
  it('should add the mock number 2 to 2', () => {
    jest.setMock('./a', 2);
    const add = require('./add');
    expect(add(2)).toBe(4);
  });
});

第一个测试通过,第二个测试失败,因为它继承了第一个模拟。是否有办法多次模拟a模块?

我希望找到一种解决方案,而不是对add函数进行重构,而是专注于多次模拟该模块(在我的真实项目中是一个配置文件)。

您可以在此处尝试代码:https://repl.it/@adyz/NocturnalBadComma

0