我有一个node
模块分辨率。并准备下一个模块:
A/
A.tsx
index.ts
B/
B.tsx
index.ts
text.tsx
// A/A.tsx
export const A = '1'
// A/index.tsx
export {A} from 'A'
因此,B.tsx
包括A.tsx
:
// B.tsx
include {A} from '../A'
// ...usage
现在,我想用UT来介绍B
。我为此开玩笑。
因此,在整个测试过程中,我想模拟A
模块。我可以使用几种方法来做到这一点:
//test.tsx
jest.mock('../A', () => ({
A: () => <div id='A' />
}))
可以!
__mocks__
文件夹中创建一个模拟文件因此,我必须在与__mocks__
文件夹相同级别上创建一个A
文件夹,并在其中创建A.tsx
文件。
__mocks__/
A/
B/
并将该模拟包含在测试中:
// test.tsx
jest.mock('../A')
因此,该方法无效。而且,由于模块分辨率,它似乎不起作用,因为如果我直接包含A
模块,例如:
// B.tsx
import {A} from '../A/A'
并将模拟文件A.tsx
移至A/__mocks__/A.tsx
并更改模拟:
// test.tsx
jest.mock('../A/A')
然后,一切正常。
因此,任务是以某种方式修复模块分辨率。
答案 0 :(得分:1)
节点尝试解决此模块:
../A
...并检测到它是a folder that doesn't have a package.json
so it loads index.js
。
这意味着该行:
../A
...也可以这样写:
../A/index
因此,要创建一个Manual Mock,您应该在此处创建模拟对象:
../A/__mocks__/index.ts
...并且在测试中调用该模拟时将使用该模拟:
jest.mock('../A'); // <= uses the mock at ../A/__mocks__/index.ts