使用Jest模拟名称空间和具有相同名称的函数

Kub*_*uba 9 mocking node.js typescript jestjs

我正在使用的库是结构化的

declare namespace foo {
  function bar();
};

declare namespace foo.bar {
  function baz();
};
Run Code Online (Sandbox Code Playgroud)

所以我需要模拟的两个函数是foo.bar()foo.bar.baz().

模拟foo.bar()我以前使用

require('foo');

jest.mock('foo', () => ({
  bar: () => mockedBar,
}));
Run Code Online (Sandbox Code Playgroud)

有什么方法可以嘲笑foo.bar.baz()吗?我试过了

jest.mock('foo.bar', () => ({
}));
Run Code Online (Sandbox Code Playgroud)

但它正在显示一条消息Cannot find module 'foo.bar' from 'functions.test.js'.

l2y*_*sho 4

__mocks__您可以在项目根目录的文件夹中为模块定义自定义模拟(在 jest 配置中定义!)。因此,您可以__mocks__/foo.js使用模拟foo模块函数进行创建,Jest 会自动加载该模块以进行测试。您还可以指定模拟的自定义路径:

jest.mock('foo', () => jest.requireActual('../some/another/folder/foo.js'));

查看Jest 手册以获取更多信息