Jest测试中预期与接收数据不匹配报错该如何解决
Jest预期与接收数据不匹配的解决方案
问题排查&调整步骤
- 首先确认
generateSalamWelcome的返回值结构:你当前日志打印的是result[0].data,但断言直接对比的是整个result和strings.salamWelcomeEn,大概率是取值层级错误,调整断言为:
expect(result[0].data).toEqual(strings.salamWelcomeEn);
- 检查mock返回值和业务逻辑的匹配性:你当前mock返回
{enOnly: false, bnOnly: false},如果generateSalamWelcome的逻辑是:- enOnly为true时返回英文欢迎语
- bnOnly为true时返回孟加拉语欢迎语
- 两者都为false时返回双语拼接的欢迎语
那你预期用英文单语的strings.salamWelcomeEn必然不匹配,需要调整mock返回值为{enOnly: true, bnOnly: false}
- 补充边界校验避免空值报错:你当前加了
if(result)才打印日志,但断言没有做空值保护,建议补充判断:
expect(result).toBeDefined(); expect(result[0]?.data).toEqual(strings.salamWelcomeEn);
- 如果是字符串内容差异,可在断言前打印两者对比排查格式问题:
console.log('预期值:', strings.salamWelcomeEn); console.log('实际值:', result[0].data);
调整后的完整代码示例
describe("generateSalamWelcome", () => { it("salam queries", async () => { const getRestaurantQueriesMultipleMock = jest .spyOn(templateUtils, "getRestaurantQueriesMultiple") .mockImplementation((): any => { // 调整mock返回符合英文场景的值 return Promise.resolve({enOnly: true, bnOnly: false, }); }); const result = await generateSalamWelcome(value); expect(getRestaurantQueriesMultipleMock).toHaveBeenCalled(); // 调整断言取值层级 expect(result).toBeDefined(); expect(result[0].data).toEqual(strings.salamWelcomeEn); }); });
内容的提问来源于stack exchange,提问作者Al Imran Hossain
相关产品推荐
相关产品推荐

