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

如何使用async/await为writeFragment函数编写单元测试?

使用async/await为writeFragment编写单元测试示例

假设我们用Jest作为测试框架,核心思路是先模拟metadata.put这个异步方法,再通过async/await处理异步逻辑,验证函数的调用行为和返回结果。

步骤1:模拟依赖模块

首先模拟metadata模块(假设它是一个独立模块),避免测试时触发真实的存储操作:

jest.mock('./metadata', () => ({
  put: jest.fn().mockResolvedValue(true) // 预设异步成功返回值
}));

// 引入依赖和目标函数
const metadata = require('./metadata');
const { writeFragment } = require('./your-module');

步骤2:编写单元测试用例

测试成功场景

test('writeFragment 应正确调用metadata.put并返回成功结果', async () => {
  // 构造测试数据
  const testFragment = {
    ownerId: 'user_001',
    id: 'fragment_001',
    title: '测试片段'
  };

  // 异步调用目标函数
  const result = await writeFragment(testFragment);

  // 验证metadata.put的调用次数和参数
  expect(metadata.put).toHaveBeenCalledTimes(1);
  expect(metadata.put).toHaveBeenCalledWith(
    testFragment.ownerId,
    testFragment.id,
    testFragment
  );

  // 验证返回值符合预期
  expect(result).toBe(true);
});

测试失败场景

test('writeFragment 应正确捕获metadata.put的错误', async () => {
  // 模拟metadata.put抛出错误
  const mockError = new Error('存储操作失败');
  metadata.put.mockRejectedValue(mockError);

  const testFragment = {
    ownerId: 'user_002',
    id: 'fragment_002',
    title: '错误测试片段'
  };

  // 验证函数会抛出预期错误
  await expect(writeFragment(testFragment)).rejects.toThrow(mockError);

  // 确认参数仍被正确传递
  expect(metadata.put).toHaveBeenCalledWith(
    testFragment.ownerId,
    testFragment.id,
    testFragment
  );
});

关键说明

  • 用jest.fn()模拟异步方法,通过mockResolvedValue和mockRejectedValue分别预设成功和失败的返回值
  • 测试用例前加async关键字,内部用await等待异步函数执行完成,确保断言时机正确
  • 同时验证调用行为(参数、次数)和返回结果/错误,保证函数逻辑符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:55:21