我有一个模型将数据存储到db中,然后通过传递刚刚创建的id
来调用另一个存储方法 //db.Poll.store method
store: function (opt, db, callback) {
var pollData = {
question: opt.data.question
};
db.Poll.create(pollData).success(function (poll) {
opt.data.PollId = poll.id;
models.PollOption.store(opt, db, callback);
}).error(function(error) {
callback(error, null);
});
}
我只想进行单元测试,以确保将有效的opt.data.PollId传递给models.PollOption.store()方法,我不想检查models.PollOption.store()行为是否正确,所以我嘲笑/覆盖了models.PollOption.store方法。我的单元测试如下所示
describe('Method store', function () {
it('should be able to create a poll and pass poll.id to pollOption.store', function (done) {
var opt = {
data: {
question: "Do you love nodejs?"
}
};
var temp = db.PollOption.store;
//mock function
db.PollOption.store = function (opt, db, callback) {
expect(opt.data.PollId).not.to.be.empty
//restore to what it was before
db.PollOption.store = temp;
callback();
};
db.Poll.store(opt, db, done);
});
});
我可以通过使用sinon.js,stub db.PollOption.store方法实现这一目的吗?
答案 0 :(得分:1)
我使用了另一个测试框架,因为我没有完整的代码,所以这里有一个如何使用sinon.spy的例子
基本上,eq(1,opt)表示期望(opt).equal.to(1)
var method = { store : function(a){
return a+1
}}
tests({
'should be able to create a poll and pass poll.id to pollOption.store': function () {
sinon.spy(method, "store") // create spy
method.store({opt:1}) // call your function
var spyCall = method.store.getCall(0) // sinon spy API .getCall(0)
// i assume this is the [objects]
// created by the spy on calling method()
eq(1, spyCall.args[0].opt) // your expect()
}
});