单元测试通过而不检查Node.js

时间:2017-04-12 12:22:37

标签: javascript node.js mocha bdd

我正在使用Node.js(BDD中的noob)。在我的控制器中,我有这样的功能:

  var getUser = function(username, done) {
    console.log('prints');
    User.findOne({
      'local.username': username
    }, function (err, user) {
      console.log('doesn"t print');
      if (err) {
        return done('Oops, server error!', null);
      } else {
        return done(null, user);
      }
    });
  };

我正在使用Mocha并描述了一个类似的测试块:

  describe('can be created only using a web interface', function () {
    describe('The user name should:', function () {
      it("be a valid email", function () {
        assert(common.isValidEmail(fakeuser.local.username));
      });
      it("not already exist in the database", function () {
        userController.getUser(fakeuser.local.username, function (err, user) {
          log.info('The user name is', user);
          //I would like to assert here. But user is always undefined.
        }());
      });
    });
  });

似乎User.findOne没有像我期望的那样工作,因为测试通过无论什么,内部的代码甚至没有被执行。我错过了什么?

注意:在代码的其他部分调用相同的函数就可以了。

修改

可在此处访问该项目:https://github.com/attosol/nodeseed

文档(和项目)远未完成。只需执行npm安装,然后启动npm,然后启动MongoDB(它将使用DB-nodeseed)。只需使用任何有效的电子邮件注册,并在日志文件中找到激活URL。

1 个答案:

答案 0 :(得分:0)

你必须写一些东西来与

进行比较
it("not already exist in the database", function(done){
    var wasCalled = false;
    userController.getUser('my@email.com', function(err, user){
      console.log('doesn"t print');
      wasCalled = true;
    });
   expect(wasCalled).toBe(true);
  });