supertest无法解析状态代码400

时间:2015-05-22 23:30:36

标签: node.js mocha supertest

我一直在遇到supertest,mocha和节点的一些问题,解析状态代码为400.

这是我的index.js代码:

var express = require('express');
var app = express();

app.get('/api/tweets', function(req, res) {
    var userId = req.query.userId;

    if (!userId) {
        return res.sendStatus(400);
    }

});

module.exports = app;

当我做mocha test.js这是我得到的打印输出:

Test:
1) respond with status code 400 for GET /api/tweets with missing userId


0 passing (75ms)
1 failing

1) Test: respond with status code 400 for GET /api/tweets with missing userId:
 Uncaught TypeError: Cannot read property 'status' of undefined
  at net.js:1419:10

以下是test.js的代码:

var request = require('supertest')

describe('Test:', function() {
  var server = require('./index')
  it('respond with status code 400 for GET /api/tweets with missing userId', function(done) {
request(server)
  .get('/api/tweets?userId')
  .expect(400, done)
  })
})

是否有任何指针可以给出?我不确定为什么node / supertest给我这么奇怪的错误。

我的设置如下:

已安装NVM,但它使用的是系统节点版本(0.12.3)。

提前感谢您的帮助!

-Stu。

2 个答案:

答案 0 :(得分:0)

您使用的是supertest的最新版本吗? supertest 1.0.0通过新版本的superagent进行了一些重大更改,改变了非{2}响应处理"error" responses的方式。

此测试适用于我使用express 4.12.2和supertest 1.0.1

var request = require('supertest')
, express = require('express');

var app = express();

app.get('/api/tweets', function(req, res) {
  var userId = req.query.userId;
  if (!userId) {
    return res.sendStatus(400);
  }

  res.sendStatus(200);
});

describe.only('GET /api/tweets', function() {
  it('should respond with HTTP 400 for missing userId', function(done) {
    request(app)
    .get('/api/tweets?userId')
    .expect(400, done);
  });
  it('should respond with HTTP 200 with userId', function(done) {
    request(app)
    .get('/api/tweets?userId=100')
    .expect(200, done);
  });
});

答案 1 :(得分:0)

  

Supertest ...无法阅读财产状况'未定义的

在通过安全连接进行测试时,我遇到了上述错误。我通过在测试运行中添加NODE_TLS_REJECT_UNAUTHORIZED=0作为env var来修复它。

对于那些想知道为什么会发生这种情况的人,可能会发生这种情况,因为' 127.0.0.1'未在证书中列为有效IP。潜在的错误是:

  

主机名/ IP与证书的altnames不匹配:" IP:127.0.0.1不在证书列表中:

然而,你不会看到这个错误信息,只是虚假和非常不喜欢"无法读取属性'状态'未定义"。