首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用jest模拟在typescript测试中从另一个文件调用的函数

在使用Jest进行TypeScript测试时,你可能需要模拟(mock)从另一个文件中调用的函数。Jest 提供了多种方法来模拟模块和函数。以下是一个详细的步骤指南,展示如何在TypeScript测试中模拟从另一个文件调用的函数。

1. 项目结构

假设你的项目结构如下:

代码语言:javascript
复制
/project
  /src
    - main.ts
    - utils.ts
  /tests
    - main.test.ts
  - tsconfig.json
  - jest.config.js
  - package.json

2. 示例代码

假设你有一个utils.ts文件,其中包含一个函数fetchData

代码语言:javascript
复制
// src/utils.ts
export const fetchData = async (): Promise<string> => {
  // Simulate an API call
  return "real data";
};

main.ts文件中,你调用了fetchData函数:

代码语言:javascript
复制
// src/main.ts
import { fetchData } from './utils';

export const getData = async (): Promise<string> => {
  const data = await fetchData();
  return `Processed ${data}`;
};

3. 安装依赖

确保你已经安装了必要的依赖:

代码语言:javascript
复制
npm install --save-dev jest ts-jest @types/jest

4. 配置Jest

jest.config.js中配置Jest以支持TypeScript:

代码语言:javascript
复制
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  moduleNameMapper: {
    '^src/(.*)$': '<rootDir>/src/$1',
  },
};

5. 编写测试

tests/main.test.ts中编写测试,并模拟fetchData函数:

代码语言:javascript
复制
// 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();
  });
});

6. 运行测试

运行测试以确保一切正常:

代码语言:javascript
复制
npm test

解释

  1. jest.mock('../src/utils'):这行代码告诉Jest自动模拟../src/utils模块中的所有导出。
  2. jest.spyOn(utils, 'fetchData').mockResolvedValue('mock data'):使用jest.spyOn来创建一个模拟函数,并指定它的返回值。mockResolvedValue用于模拟一个返回Promise的异步函数。
  3. expect(result).toBe('Processed mock data'):断言getData函数的返回值是否符合预期。
  4. mockFetchData.mockRestore():在测试结束后恢复fetchData函数的原始实现。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券