API 路由测试意外结果

API Route Testing Unexpected Results

我正在写一个 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 块。

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();
   });
});

正如您从上面的测试中看到的那样,测试应该会失败,因为测试中响应标准的 none 匹配应该从 API 返回的响应,但它仍然继续我每次都通过运行它。

有人知道为什么会这样吗? 提前感谢您的帮助。

大家好,发现测试代码中的done()位置不对的问题。它应该类似于下面的代码。

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();
            });
    });