我已经浏览了有关手动模拟的官方 Jest 文档,但我不太明白它的意义。
我有一个导出计算值对象的文件
utils.js
export const getCalculatedValues = (stuff) => ({
val1: 'val1',
val2: 'val2',
...
});
然后我在我尝试测试的其他几个文件中使用它 - 例如:
usage.js
import {getCalculatedValues} from './utils';
export const doSomething = () => getCalculatedValues('some-val');
到目前为止,我已经成功地嘲笑了原来的
getCalculatedValues
usage.test.js
jest.mock('./utils', () => ({
__esModule: true,
getCalculatedValues: {
val1: 123,
val2: 321,
...
}
}));
// Assume this passes ;-)
it('Should return mock values', () => {
const res = doSomething();
expect(res.val1).toEqual(123);
});
如前所述,我在几个不同的文件中使用
getCalculatedValues
,这意味着我需要在每个测试文件中执行它的 jest.mock
,这是大量重复。
我正在尝试了解 Jest 的“手动嘲笑”方面,但我似乎不明白我应该做什么......
我知道我应该在
__mocks__
目录中创建一个文件,但从那里开始,我不完全确定该文件中应该包含什么...
我觉得我的困惑来自于关于这个问题的官方 Jest 文档,因为他们展示了同时对依赖项和文件执行手动模拟。
我从我看到的 Youtube 教程中获得了一些灵感,该教程显示仅对文件执行手动模拟。
因此,正如文档所说,您必须在同一目录级别但在其自己的
__mocks__
目录中为您尝试模拟的事物创建一个模拟。
所以对我来说,假设我们有一个像这样的文件结构
.
└── src/
├── utils/
│ └── utils.js
└── other-files/
├── usage.js
└── usage.test.js
假设我们想要模拟
/src/utils/utils.js
中的功能而不是 /other-files/usage
中的功能,我们应该在 __mocks__
中创建
__mocks__/utils.js
目录和
/src/utils
.
└── src/
├── utils/
│ ├── __mocks__/
│ │ └── utils.js
│ └── utils.js
└── other-files/
├── usage.js
└── usage.test.js
/__mocks__/utils.js
的内容应该反映您正在模拟的原始文件的内容。至少,您想要模拟的部分并返回您正在寻找的模拟值。
模拟/utils.js
export const getCalculatedValues = (stuff) => ({
val1: 'mocked-val1',
val2: 'mocked-val2',
...
});
然后,我们只需在
/other-files/usage.test.js
文件中模拟它
jest.mock('../utils/utils');
// Assume this passes ;-)
it('Should return mock values', () => {
const res = doSomething();
expect(res.val1).toEqual(123);
});
应该就是这样!
一个好的检查是对您想要检查的值进行
console.log
。