从图书馆摩卡单位testingerror handling

我有下面的代码,基本上从数据库中获取用户。 下面的代码是使用Dynamoose,但我假设在许多其他库和包中有类似的东西。

User.get(searchid, function(err, user) { if (err) { console.log(err); return res.send('error'); } else { //DO LOGIC } }); 

我写了unit testing来处理上面else语句中的所有逻辑。 但我想弄清楚是否有办法编写unit testing来处理代码的if (err)部分。 基本上我想写unit testing,以确保如果有错误,它会返回正确的东西,我会为任何其他testing我应该写的build议。 如何在这种情况下编写testing,并用unit testing来覆盖这些代码?

你应该模拟User.get使它直接执行callback,你想要的参数。

要做到这一点,根据您的testing设置,您可能有多种可能性。

我使用rewire 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 } }); } 

基本你的testing看起来像:

 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. });