API路线测试意外结果

时间:2018-02-01 21:06:41

标签: javascript node.js testing mocha chai

我正在编写一个MEAN API,我有一个名为/ authenticate的路由,用户可以登录。下面我已经显示了它自己的路由。

 // User Login Route - http://localhost:8080/api/authenticate
router.post('/authenticate', function(req, res) {
   User.findOne({ username: req.body.username }).select('email username password').exec(function(err, user) {
      if (err) throw err;

      if (!user) {
          res.json({ success: false, message: 'Could not authenticate user.'});
      } else if (user) {
            //Using comparePassword Method
          if (req.body.password) {
              var validatePassword = user.comparePassword(req.body.password);
              if (!validatePassword) {
                  res.json({success : false, message : 'Could not authenticate password!'});
              }
              else{
                  res.status(200).json({success : true, message : 'User authenticated!'});
              }
          }
          else{
              res.json({success : false, message : 'Not password provided!'});
          }
      }
   });
});

我现在正尝试使用mocha和chai库测试路线。下面我展示了我用来测试这个功能的描述块。

describe('POST /authenticate', function() {
   it('should return an error', function (done) {
      var newUser = {
          "username" : "testetet",
          "password" : "hgfhghg"
      };
      chai.request(server)
          .post('/api/authenticate')
          .send(newUser)
          .end(function (err, res) {
              expect(res).to.have.status(201);
              expect(res.body).to.have.property('message').equal('User Created.');
          });
      done();
   });
});

从上面的测试中可以看出,测试应该失败,因为测试中的响应标准都没有与应该从API返回的响应匹配,但是每次运行它时它仍然会继续通过。

有没有人有任何想法为什么会发生这种情况? 感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

Hi guys found the problem the done() in the test code was in the wrong place. It should look like the code below.

it('should return a user authenticated message', function (done) {
        var user = {
            "username": "testuser1",
            "password": "testPassword1"
        };
        chai.request(server)
            .post('/api/authenticate')
            .send(user)
            .end(function (err, res) {
                expect(res).to.have.status(200);
                expect(res.body).to.have.property('message').equal('User Authenticated!');
                done();
            });
    });