如何在TypeScript中mock request-promise模块的get方法
TypeScript 环境下 mock request-promise get 方法的实现方案
以下是主流测试框架(以 Jest 为例)下的实现步骤:
方案1:单测试文件内局部 mock
- 首先在测试文件顶部声明 mock 整个
request-promise模块,再导入get方法 - 对导入的
get方法做类型断言,解决 TypeScript 类型校验报错 - 在测试用例中自定义返回值、验证调用逻辑即可
代码示例:
// 声明 mock 整个 request-promise 模块 jest.mock('request-promise') import { get } from 'request-promise' // 类型断言,将 get 标记为 Jest 的 mock 函数类型 const mockGet = get as jest.MockedFunction<typeof get> // 测试用例 test('测试业务逻辑中 get 请求调用', async () => { // 模拟 get 请求成功返回 mockGet.mockResolvedValue({ code: 200, data: 'mock 返回的业务数据' }) // 调用你自己的业务方法(内部依赖 request-promise 的 get) const res = await yourBusinessFn() // 校验 get 方法调用参数符合预期 expect(mockGet).toHaveBeenCalledWith('https://your-target-api.com/path') // 校验业务返回结果符合预期 expect(res).toEqual('预期的业务结果') })
方案2:全局手动 mock
如果多个测试文件都需要 mock request-promise,可使用 Jest 全局 mock 能力:
- 在项目根目录新建
__mocks__/request-promise.ts文件,内容如下:
export const get = jest.fn().mockResolvedValue({ // 可预置默认返回值 code: 200, data: {} }) // 其他你用到的 request-promise 方法可按相同规则 mock
- 测试文件中无需额外声明
jest.mock('request-promise'),导入的get方法会自动使用 mock 版本,同样可以按方案1的方式做类型断言、自定义单用例的返回值。
常见场景扩展
- 模拟请求失败:使用
mockGet.mockRejectedValue(new Error('网络异常'))即可模拟请求抛出错误的场景 - 多次调用返回不同结果:可使用
mockGet.mockResolvedValueOnce(第一次返回值).mockResolvedValueOnce(第二次返回值)实现多请求不同返回的 mock
内容的提问来源于stack exchange,提问作者zfyseu
相关产品推荐
相关产品推荐

