Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest mocks-如何在测试之间恢复原始功能_Javascript_Unit Testing_Jestjs - Fatal编程技术网

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中),您可以重新模拟您的函数