见代码
//api.js
exports.duplicated = function(req, res) {
var result = utils.checkDuplicateUsernameWithEmail(req.param('username'),
req.param('email'));
return res.json(result);
}
//test/api.js
describe('- 1.用户接口测试', function(){
it('用户名是否重复', function(){
var spy = sinon.spy();
var mock = sinon.mock(utils);
mock.expects('checkDuplicateUsernameWithEmail').returns({
username: false,
email: true
});
var app = express();
app.get('/api/duplicated', api.duplicated);
request(app)
.get('/api/duplicated?username=nidongde&email=nidongde[@dogabyte](/user/dogabyte).com')
.set('Accept', 'application/json')
.end(function(err, res) {
if (err) {
throw err;
}
res.body.username.should.equal(false);
res.body.email.should.equal(true);
});
mock.verify();
});
});
上述代码不能使用,会抛出一个错误
ExpectationError: Expected checkDuplicateUsernameWithEmail([...]) once (never called)
说checkDuplicateUsernameWithEmail 这个方法从未使用过, 有一些不理解sinon的mock用法,最近刚刚接触test,折腾了很久,都要泪奔了。 另外这段代码是可以用的。
describe('- 1.用户接口测试', function(){
it('用户名是否重复', function(){
utils.checkDuplicateUsernameWithEmail = function(username, email) {
console.log(username, email);
return {username: false, email: true};
}
var app = express();
app.get('/api/duplicated', api.duplicated);
request(app)
.get('/api/duplicated?username=nidongde&email=nidongde[@dogabyte](/user/dogabyte).com')
.set('Accept', 'application/json')
.end(function(err, res) {
if (err) {
throw err;
}
// this is should.js syntax, very clear
res.body.username.should.equal(false);
res.body.email.should.equal(true);
});
});