You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jest模拟返回图片Buffer的Axios接口请求

Jest 模拟返回图片Buffer的Axios接口测试实现方案

实现思路

  • 首先Mock axios模块,拦截axios.create调用,拿到自定义imageApi实例上get方法的模拟权限
  • 构造符合JPEG格式的测试用Buffer模拟接口返回值
  • 分别覆盖接口请求成功、请求失败两个场景的测试用例

完整测试代码

const axios = require('axios');
// 替换为你实际存放fetchRandomImage的文件路径
const fetchRandomImage = require('./fetchRandomImage');

// Mock整个axios模块
jest.mock('axios');

// 如果测试时提示找不到logger模块,添加下方mock即可
// jest.mock('./logger', () => ({
//   info: jest.fn(),
//   error: jest.fn()
// }));

describe('fetchRandomImage 功能测试', () => {
  // 模拟axios.create返回的实例上的get方法
  const mockAxiosGet = jest.fn();
  beforeAll(() => {
    axios.create.mockReturnValue({
      get: mockAxiosGet
    });
  });

  // 每次测试后清空调用记录,避免用例互相影响
  afterEach(() => {
    mockAxiosGet.mockClear();
  });

  test('请求成功时返回正确的图片Buffer', async () => {
    // 构造和示例格式一致的JPEG开头模拟Buffer
    const mockImageBuffer = Buffer.from([
      0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01
    ]);
    // 模拟get方法返回正确响应
    mockAxiosGet.mockResolvedValue({
      data: mockImageBuffer
    });

    const testParams = { imageId: 'test123', width: 200, height: 300 };
    const result = await fetchRandomImage(testParams);

    // 校验请求参数是否符合预期
    expect(mockAxiosGet).toHaveBeenCalledWith(
      `/id/${testParams.imageId}/${testParams.width}/${testParams.height}`,
      { responseType: 'arraybuffer' }
    );
    // 校验返回值符合预期
    expect(result).toBeInstanceOf(Buffer);
    expect(result).toEqual(mockImageBuffer);
  });

  test('请求失败时返回null', async () => {
    // 模拟接口抛出异常
    mockAxiosGet.mockRejectedValue(new Error('Network Error'));

    const result = await fetchRandomImage({ imageId: 'err_test', width: 100, height: 100 });
    expect(result).toBeNull();
  });
});

内容的提问来源于stack exchange,提问作者Nipun Ravisara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:27:00