Javascript 单元测试调用其他方法的方法
我是测试新手。我试图对一个调用其他两个方法的方法进行单元测试。我试着截取这两个方法,但看起来原始方法仍在被调用。我正在尝试测试我的方法是否将savePoll方法返回的对象添加到user.polls数组中 test.jsJavascript 单元测试调用其他方法的方法,javascript,promise,mocha.js,chai,Javascript,Promise,Mocha.js,Chai,我是测试新手。我试图对一个调用其他两个方法的方法进行单元测试。我试着截取这两个方法,但看起来原始方法仍在被调用。我正在尝试测试我的方法是否将savePoll方法返回的对象添加到user.polls数组中 test.js var UserStub = sinon.stub(); var PollStub = sinon.stub(); var OptionStub = sinon.stub(); var saveOptionsStub = sinon.stub(); var savePollStu
var UserStub = sinon.stub();
var PollStub = sinon.stub();
var OptionStub = sinon.stub();
var saveOptionsStub = sinon.stub();
var savePollStub = sinon.stub();
var users = proxyquire('../controllers/users', {
'../models/user': UserStub,
'../models/poll': PollStub,
'../models/option': OptionStub
});
beforeEach(function() {
res = {
json: sinon.spy(),
send: sinon.spy(),
status: function(responseStatus) {
return this;
}
};
req = {
params: {
id: 1
}
};
UserStub.save = function(callback) {
callback(null, req.body);
};
});
describe('add a poll', function() {
it('should add the poll', function() {
req.body = {
name: 'Poll1',
options: [{
text: 'option1',
votes: 0
}, {
text: 'option2',
votes: 1
}]
};
var user = {};
user.polls = [];
UserStub.findById = function(query, callback) {
callback(null, user);
};
sinon.stub(require('../controllers/users'), 'saveOptions').returns([OptionStub, OptionStub]);
sinon.stub(require('../controllers/users'), 'savePoll').returns({});
users.addPoll(req, res);
expect(user.polls).to.equal('[{}]');
});
});
users.js
addPoll: function(req, res) {
var self = this;
User.findById(req.params.user_id, function(err, user) {
if (err) return res.status(400).json(err);
self.saveOptions(req.body.options)
.then(function(optionsArr) {
var pollName = req.body.name;
self.savePoll(pollName, optionsArr)
.then(function(poll) {
user.polls.push(poll);
user.save(function(err, user) {
if (err) return res.status(500).json(err);
res.json(poll);
});
}, function(err) {
return res.status(500).json(err);
});
}, function(err) {
return res.status(400).json(err);
});
});
},
savePoll: function(pollName, optionsArr) {
return new Promise(function(resolve, reject) {
var poll = new Poll();
poll.name = pollName;
poll.options = optionsArr.slice();
poll.save(function(err, poll) {
if (err) {
reject(err);
} else {
resolve(poll);
}
});
});
},
saveOptions: function(options) {
var optsArr = [];
var promises = options.map(function(opt) {
return new Promise(function(resolve, reject) {
var option = new Option(opt);
return option.save(function(err, option) {
if (err) {
reject(Error(err));
} else {
resolve(optsArr.push(option));
}
});
});
});
return Promise.all(promises).then(function() {
return optsArr;
}).catch(function(err) {
console.log(err);
});
}
所有那些间谍都只是一个皮塔。您可以直接测试承诺代码-如果您
返回来自it
的承诺,它将等待它,并根据承诺是否得到解决/拒绝而失败/通过-感谢您的链接。这对测试savePoll和saveOptions方法很有帮助,但是如何确保addPoll方法中的这一行user.polls.push(poll)
也能正常工作呢?所有这些间谍都只是一个PiTA。您可以直接测试承诺代码-如果您返回来自it
的承诺,它将等待它,并根据承诺是否得到解决/拒绝而失败/通过-感谢您的链接。这对测试savePoll和saveOptions方法很有帮助,但是如何确保addPoll方法中的这一行user.polls.push(poll)
也正常工作?