qui*_*mmo 4 typescript reactjs jestjs react-redux
我对Jest完全陌生。
我正在使用带有Typescript的React,并且在单元测试中,我必须模拟一个模块,该模块包含在我要为其编写容器测试(容器组件)的主文件中。
我尝试测试的文件导入了此模块:
import PerformancesResultsReader from './../../models/PerformancesResultsReader';
Run Code Online (Sandbox Code Playgroud)
然后它通过以下方式使用该模块:
const performancesResultsReader = new PerformancesResultsReader();
performancesResultsReader.read();
Run Code Online (Sandbox Code Playgroud)
该文件称为 AppPage.component.tsx
测试文件位于同一文件夹中,当我使用自动模拟时,它可以按预期工作。自动模拟是通过jest mock
相同导入的来简单实现的:
jest.mock('./../../models/PerformancesResultsReader');
Run Code Online (Sandbox Code Playgroud)
这样,所有方法都简单地返回undefined
。
现在,我试图添加一个手动模拟而不是自动模拟。
这是PerformancesResultsReader.js
模拟代码:
console.log('including mock!');
const mock = jest.fn().mockImplementation(() => {
return {
read: () => {
console.log('mocked');
}
};
});
export default mock;
Run Code Online (Sandbox Code Playgroud)
我试图将其放置__mocks__
在与我正在测试的文件相同级别的子文件夹中,并且尝试将其也放置在要模拟的导入模块的同一文件夹中。在这两种情况下,它似乎根本没有被调用(第一个控制台日志永远不会被打印)。
请问我做错了什么吗?
我找到了使其工作的方法。
整理步骤仅需几个步骤:
__mock__
模拟依赖项时,可以将文件夹放置在测试要导入的主文件的同一级别,也可以放置在要模拟的类的同一级别jest.mock
必须在包含要测试的主文件之前发生,该主文件要求模拟该文件因此,代码如下。
要进行单元测试的主文件(AppPage.component.tsx
):
// all imports
import PerformancesResultsReader from './../../models/PerformancesResultsReader'; // dependency to be mocked
// your AppPage component here
export default AppPage;
Run Code Online (Sandbox Code Playgroud)
在__mock__
子文件夹(PerformancesResultsReader.tsx
)中模拟:
class PerformancesResultsReader {
constructor() {
console.log('Mock constructor');
}
// all your methods here
}
export default PerformancesResultsReader;
Run Code Online (Sandbox Code Playgroud)
最后的单元测试(AppPage.component.spec.tsx
):
// call the defined mock
jest.mock('./../../models/PerformancesResultsReader');
// import the main file which is going to be tested
import AppPage from './AppPage.component';
describe('App Container Component', () => {
// your tests
});
Run Code Online (Sandbox Code Playgroud)
上面示例的文件夹结构如下:
- components
-- AppPage.component.tsx
-- AppPage.component.spec.tsx
- models
-- PerformancesResultsReader.tsx
-- __mock__
--- PerformancesResultsReader.tsx
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2031 次 |
最近记录: |