库中的 Mocha 单元测试错误处理
Mocha Unit Test Error Handling from Library
我有下面的代码,基本上从数据库中获取用户。下面的代码使用 Dynamoose 但我假设在许多其他库和包中也有类似的东西。
User.get(searchid, function(err, user) {
if (err) {
console.log(err);
return res.send('error');
} else {
//DO LOGIC
}
});
我已经编写了单元测试来处理上面 else 语句中的所有逻辑。但我想弄清楚是否有一种方法可以编写单元测试来处理代码的 if (err)
部分。基本上,我想编写单元测试以确保如果出现错误,它 returns 是正确的东西,但我会接受我应该编写的其他测试的任何建议。在这种情况下我如何编写测试并用单元测试覆盖这段代码?
你应该模拟 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.
});
我有下面的代码,基本上从数据库中获取用户。下面的代码使用 Dynamoose 但我假设在许多其他库和包中也有类似的东西。
User.get(searchid, function(err, user) {
if (err) {
console.log(err);
return res.send('error');
} else {
//DO LOGIC
}
});
我已经编写了单元测试来处理上面 else 语句中的所有逻辑。但我想弄清楚是否有一种方法可以编写单元测试来处理代码的 if (err)
部分。基本上,我想编写单元测试以确保如果出现错误,它 returns 是正确的东西,但我会接受我应该编写的其他测试的任何建议。在这种情况下我如何编写测试并用单元测试覆盖这段代码?
你应该模拟 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.
});