跳到主要内容
CNode

问一个sinon(mock)问题

社区
Nnsdont发布于 13 年前最后回复 13 年前
134340

见代码

//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);
        });
    });
查看回复

回复 (1)

N
nsdont#113 年前

已经解决

参与回复

登录后即可参与回复。登录