我正在使用React和Typescript,在单元测试中,我必须模拟一个模块,该模块包含在我正在为其编写单元测试的主文件中(容器组件)。
我尝试测试的文件导入了这个模块:
import PerformancesResultsReader from './../../models/PerformancesResultsReader';
然后它以如下方式使用该模块:
const performancesResultsReader = new PerformancesResultsReader();
performancesResultsReader.read();
此文件名为AppPage.component.tsx
测试文件位于同一个文件夹中,当我使用自动模拟时,它按预期工作。自动mock只需要通过相同导入的jest mock
即可实现:
jest.mock('./../../models/PerformancesResultsReader');
这样,所有的方法都返回undefined
。
现在我正试图添加一个手动模拟而不是自动模拟。
以下是PerformancesResultsReader.js
模拟代码:
console.log('including mock!');
const mock = jest.fn().mockImplementation(() => {
return {
read: () => {
console.log('mocked');
}
};
});
export default mock;
我试着把它放在__mocks__
子文件夹中,与我正在测试的文件处于同一级别,我试着把它也放在我想要模拟的导入模块的同一文件夹中。在这两种情况下,它似乎根本没有被调用(第一个控制台日志从来没有被打印出来)。
请问我做错了什么?
1条答案
按热度按时间mv1qrgav1#
我已经找到了解决的办法。
有几个步骤需要整理出来:
1.在模拟依赖项时,可以将
__mock__
文件夹放置在要测试的主文件的同一级别(该主文件导入了__mock__
),或者放置在要模拟的类的同一级别1.在单元测试文件中,对
jest.mock
的调用必须在包含要测试的主文件之前发生,主文件要求模拟该文件代码如下:
待进行单元测试的主文件(
AppPage.component.tsx
):在
__mock__
子文件夹(PerformancesResultsReader.tsx
)中进行模拟:最终单元测试(
AppPage.component.spec.tsx
):以上示例的文件夹结构如下: