sinon - callsArg具有高级用法

时间:2014-05-10 15:47:44

标签: javascript unit-testing mocha sinon

我可以使用callsArgWith来测试回调,例如:

var modelsMock = { 
  Users: {
    findOne: sinon.stub()
  }
};

usersController.__set__({
  'models': modelsMock, 
}); 

//... inside a test:
var user = 'foo';
modelsMock.Users.findOne.callsArgWith(1, true, user);

当我的代码是:

时,这很好用
models.Users.findOne(id, function(err, user) {
   //stuff here.
});

但是如何在以下情况下测试回调?

var user = new models.Users(userData);
user.save(function(err) {
  //I want to test this callback
});

如果不够明确,请告诉我,我会尝试更好地解释。

1 个答案:

答案 0 :(得分:0)

您可以使用间谍功能作为回调本身;它与你现有的模拟无关。

假设您要测试以下功能:

function createUser(callback) {
  var user = new models.Users(userData);
  user.save(callback);
}

在你的测试中,你将它作为回调传递给间谍

// inside a test
var spyCallback = sinon.spy(); 
// when
createUser(spyCallback);
// then
assert(spyCallback.calledWith(user));