Javascript Jest mocks-如何在测试之间恢复原始功能
我有我的职责:Javascript Jest mocks-如何在测试之间恢复原始功能,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我有我的职责: report.js: constctrl={}; const=require('lodash'); 恒臂=需要(“臂”); const slackNotifications=require('./../../slack/controllers/notifications'); const reportModel=require(“../../models/report”); 从“/./\u验证/报告”导入validationSchema; ctrl.addReport=async
report.js
:
constctrl={};
const=require('lodash');
恒臂=需要(“臂”);
const slackNotifications=require('./../../slack/controllers/notifications');
const reportModel=require(“../../models/report”);
从“/./\u验证/报告”导入validationSchema;
ctrl.addReport=async(请求、恢复)=>{
const{body}=req;
试一试{
const validatedData=等待验证schema.validate(正文);
const report=await reportModel(req.dbConnection).addReport(validatedData);
如果(report.reported){
等待松弛通知。通知('notify me!');
res.status(200).send({报告:true});
}否则{
抛出boom.serverUnavailable(“无法提供报告”);
}
}捕捉(错误){
抛出动臂。错误请求(err);
}
};
module.exports=ctrl;
验证模式是使用yup.js创建的模式
这是你的电话号码
问题是验证失败时抛出错误。我有
TypeError:无法读取未定义的属性“output”
从109线开始
const{output,output:{payload}}=err代码>
但我的期望值是validationSchema.validate抛出的错误,并被捕获在函数的第23行中
当我运行时,只有此测试一切正常。我得到了状态代码和消息的正确错误
如何从该测试(第84行)恢复原始函数validationSchema.validate
我已尝试通过以下方式恢复:
jest.mock('./../_validation/report', () => ({
// validate: jest.fn().mockReset(),
validate: jest.fn().mockClear(),
}));
但我不确定这是正确的方法。您可以在测试中使用,只为一个测试执行原始行为
这样:
jest.mock('./../_validation/report', () => ({
validate: jest.requireActual('./../_validation/report').validate,
}));
这样,将调用real验证
当然,在下一次测试中(或在beforeach中),您可以重新模拟您的函数