在使用Jest进行TypeScript测试时,你可能需要模拟(mock)从另一个文件中调用的函数。Jest 提供了多种方法来模拟模块和函数。以下是一个详细的步骤指南,展示如何在TypeScript测试中模拟从另一个文件调用的函数。
假设你的项目结构如下:
/project
/src
- main.ts
- utils.ts
/tests
- main.test.ts
- tsconfig.json
- jest.config.js
- package.json
假设你有一个utils.ts
文件,其中包含一个函数fetchData
:
// src/utils.ts
export const fetchData = async (): Promise<string> => {
// Simulate an API call
return "real data";
};
在main.ts
文件中,你调用了fetchData
函数:
// src/main.ts
import { fetchData } from './utils';
export const getData = async (): Promise<string> => {
const data = await fetchData();
return `Processed ${data}`;
};
确保你已经安装了必要的依赖:
npm install --save-dev jest ts-jest @types/jest
在jest.config.js
中配置Jest以支持TypeScript:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
moduleNameMapper: {
'^src/(.*)$': '<rootDir>/src/$1',
},
};
在tests/main.test.ts
中编写测试,并模拟fetchData
函数:
// tests/main.test.ts
import { getData } from '../src/main';
import * as utils from '../src/utils';
jest.mock('../src/utils');
describe('getData', () => {
it('should return processed data', async () => {
// Mock the fetchData function
const mockFetchData = jest.spyOn(utils, 'fetchData').mockResolvedValue('mock data');
const result = await getData();
expect(result).toBe('Processed mock data');
// Restore the original implementation
mockFetchData.mockRestore();
});
});
运行测试以确保一切正常:
npm test
../src/utils
模块中的所有导出。jest.spyOn
来创建一个模拟函数,并指定它的返回值。mockResolvedValue
用于模拟一个返回Promise
的异步函数。getData
函数的返回值是否符合预期。fetchData
函数的原始实现。领取专属 10元无门槛券
手把手带您无忧上云