是否可以使用Jest模拟本地函数

时间:2018-02-22 05:32:48

标签: node.js reactjs jestjs

我有一个文件(file.js),由同一个文件中的3个函数组成:

  

file.js:

const fn1 = (number) => {
    return number + 1;
}

export const fn2 = (value) => {
    return value;
}

export const fn3 = (number) => {
    return fn1(number);
}

export const fn4 = (number) => {
    return fn2(number);
}

是否可以使用JEST定期模拟这些功能?我希望实现的目标是:

  

file.test.js:

import { fn2, fn3, fn4 } from 'file.js';

describe('fn2', () => {
  test('normal test.' => {
    expect(fn2(1)).toBe(1);
  })
});

describe('fn3', () => {
  test('mock fn1 for this test.' => {
    mock fn1 = () => { return 1 };

    expect(fn3(2)).toBe(1);
  })
});

describe('fn4', () => {
  test('mock fn2 for this test.' => {
    mock fn2 = () => { return 1 };

    expect(fn4(2)).toBe(1);
  })
});

1 个答案:

答案 0 :(得分:2)

JS模块的工作方式是不可能的。只有导出的函数对外部可见,所有其他东西只在模块的范围内可见,因此无法模拟它。此外,您无需模拟此功能,因为您只想测试公共API。

测试函数本身并为此模块模拟它的唯一方法是将它放入一个自己的模块中,如果它是一个非常复杂的函数,你需要良好的测试覆盖率,这是很有意义的当它在另一个模块中时。

相关问题