我一直在遇到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。
答案 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不在证书列表中:
然而,你不会看到这个错误信息,只是虚假和非常不喜欢"无法读取属性'状态'未定义"。