javascript - 多次使用不同的值开 Jest 模拟模块

标签 javascript unit-testing jestjs

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

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

最佳答案

添加

beforeEach(() => {
    jest.resetModules();
});

最终测试

describe('add', () => {

    beforeEach(() => {
        jest.resetModules();
    });

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

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

演示:https://repl.it/repls/TrustingBelatedProprietarysoftware

关于javascript - 多次使用不同的值开 Jest 模拟模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49650323/

相关文章:

c# - 为什么.NET 中没有 IDateTimeProvider 而 DateTime 有 Now getter?

unit-testing - 字节伙伴和 cglib 在 Spock 测试中不可用

reactjs - 如何在 Jest 中为函数编写测试用例?

javascript - 语法错误: unexpected Identifier in node js callback function

javascript - 为什么这个撤消逻辑在 p5.js 中不起作用?

javascript - 没有固定高度的页脚位置

c# - 比较 LINQ-to-SQL 中的 byte[] 和使用模拟的单元测试

testing - 在 Jest 中,通过分片并行化和工作线程并行化有什么区别?

javascript - 如何使用 Jest 检查元素是否可见?

javascript - heroku 日志 sh : 1: concurrently: not found