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

如何使用fastify server.inject测试文件上传并mock azureBlob.js

Fastify文件上传接口单元测试实现方案

1. 通过server.inject构造文件上传模拟请求

Fastify 处理文件上传依赖@fastify/multipart插件,使用inject模拟上传时不需要手动构造复杂的multipart格式报文,按以下规则传参即可:

  • 不要手动在headers中指定Content-Type: multipart/form-data,框架会自动生成带合法boundary的请求头,手动指定会导致解析失败
  • 测试文件不需要读取本地真实文件,直接用Buffer生成模拟文件内容即可
  • 必须在inject配置中开启multipart: true标识

补全后的测试用例代码:

it("should return 200", async () => {
  // 生成模拟文件内容
  const mockFileContent = Buffer.from("fake png file binary content");
  const response = await server.inject({
    method: "POST",
    url: `/Store/${StoreID}/logo`,
    headers, // 原有鉴权等头信息保留即可
    payload: {
      file: {
        value: mockFileContent,
        filename: "test-logo.png",
        contentType: "image/png"
      }
    },
    multipart: true
  });
  expect(response.statusCode).toBe(200);
  // 可额外断言返回的blob地址格式是否符合预期
});

2. Mock azureBlob.js 屏蔽真实Azure存储调用

根据你使用的测试框架(Jest/Vitest 写法通用),直接在测试文件顶部对azureBlob模块做拦截,替换上传方法的实现,让其直接返回固定测试URL,不执行真实的SDK初始化、容器创建、文件上传逻辑。

// 注意替换为azureBlob.js相对于当前测试文件的真实相对路径
// Vitest 写法
vi.mock("../utils/azureBlob.js", () => ({
  uploadFileToBlob: vi.fn().mockResolvedValue("https://test-azure-blob.xxx.com/test-logo.png")
}));

// Jest 写法把vi替换为jest即可
// jest.mock("../utils/azureBlob.js", () => ({
//   uploadFileToBlob: jest.fn().mockResolvedValue("https://test-azure-blob.xxx.com/test-logo.png")
// }));

如果需要校验接口是否正确把文件传给了上传方法,可以在测试用例中增加断言:

import { uploadFileToBlob } from "../utils/azureBlob.js";

it("should return 200", async () => {
  // 先清空之前的mock调用记录
  vi.mocked(uploadFileToBlob).mockClear();
  // ... 上面的inject请求逻辑
  expect(uploadFileToBlob).toHaveBeenCalledTimes(1);
  // 可以进一步校验传入的文件参数属性是否正确
  const uploadArg = uploadFileToBlob.mock.calls[0][0];
  expect(uploadArg.filename).toBe("test-logo.png");
});

注意:因为Mock直接替换了uploadFileToBlob的实现,方法内部的BlobServiceClient初始化、createBlobInContainer等逻辑完全不会执行,不需要额外Mock Azure SDK相关依赖,不会产生真实的云服务调用。


内容的提问来源于stack exchange,提问作者Akash Vishwakarma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:24:41