我有我的职能:
report.js
:
const ctrl = {};
const _ = require('lodash');
const boom = require("boom");
const slackNotifications = require('./../../slack/controllers/notifications');
const reportModel = require("./../models/report");
import validationSchema from "./../_validation/report";
ctrl.addReport = async (req, res) => {
const { body } = req;
try {
const validatedData = await validationSchema.validate(body);
const report = await reportModel(req.dbConnection).addReport(validatedData);
if (report.reported) {
await slackNotifications.notify('Notify me!');
res.status(200).send({ reported: true });
} else {
throw boom.serverUnavailable("Can't offer report");
}
} catch (err) {
throw boom.badRequest(err);
}
};
module.exports = ctrl;
验证架构是使用yup.js创建的架构。
这里是tests
问题是throw Error when validation failed
测试。我有
TypeError:无法读取未定义的属性“输出”
从109行
const { output, output: { payload } } = err;
。
但是我的期望值是validationSchema.validate
抛出的错误,并陷入了函数的第23行。
当我仅运行此测试时,一切正常。我的状态代码和消息有正确的错误。
如何通过此测试(第84行)恢复原始功能validationSchema.validate
?
我尝试通过以下方式还原
:jest.mock('./../_validation/report', () => ({
// validate: jest.fn().mockReset(),
validate: jest.fn().mockClear(),
}));
但是我不确定这是正确的方法。
答案 0 :(得分:1)
您可以在测试中使用requireActual来仅执行一项测试的原始行为。
这种方式:
jest.mock('./../_validation/report', () => ({
validate: jest.requireActual('./../_validation/report').validate,
}));
这样,将调用真实验证 当然,在下一个测试中(或在beforeEach中),您可以重新模拟您的功能。