如何使用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
相关产品推荐
相关产品推荐

