下面的代码基本上从数据库获取用户。下面的代码使用 Dynamoose但我假设许多其他库和包中也有类似的东西。
User.get(searchid, function(err, user) {
if (err) {
console.log(err);
return res.send('error');
} else {
//DO LOGIC
}
});
我已经编写了单元测试来处理上面 else 语句内的所有逻辑。但我试图弄清楚是否有一种方法可以编写单元测试来处理代码的 if (err)
部分。基本上我想编写单元测试以确保如果出现错误它会返回正确的内容,但我会听取我应该编写的其他测试的任何建议。在这种情况下,我如何编写测试并使用单元测试覆盖此代码?
最佳答案
您应该模拟 User.get
以使其使用您想要的参数直接执行回调。
为此,您可能有多种可能性,具体取决于您的测试设置。
我使用重新接线https://github.com/jhnns/rewire
如果您的代码如下所示:
//myCode.js
var User = require('./model/User');
module.exports = function(){
User.get(searchid, function(err, user) {
if (err) {
console.log(err);
return res.send('error');
} else {
//DO LOGIC
}
});
}
基本上你的测试看起来像:
var myCode = rewire("../lib/myCode.js");
...
var UserMock = {
get: function (searchid, cb) {
cb(new Error(), null);
}
};
myCode.__set__("User", UserMock);
myCode.myFunctionCallingUserGet(function (err, data) {
// Test that you send error.
});
关于javascript - Mocha 单元测试库中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985683/