Bla*_*her 2 json mocha.js node.js supertest
我有当前要运行的测试:
var request = require('supertest');
it('should be malformed json', function(done) {
request(config.base)
.post('/authenticate')
.send('{"project":{"description":\'test"}}')
.set('Authorization', 'Bearer ' + config.token)
.expect('Content-Type', /json/)
.expect(status.BAD_REQUEST);
});
Run Code Online (Sandbox Code Playgroud)
然而,超级测试似乎验证了它,它只是在正文中发送“{}”。知道我该如何解决这个问题吗?
您将一个字符串传递给该send方法,因此它将按原样发送到服务器(您可以在那里编写任何内容!)。
服务器收到字符串后,会解析 JSON 并找到错误。接下来发生的情况取决于服务器应用程序的配置方式(或您正在使用的框架)。在这种情况下,服务器可能会忽略任何格式错误的 JSON 输入,因此就像您在/authenticate没有任何输入的情况下调用一样。
TL;DR:send()只发送您传递的任何字符串。如果您想引发错误,您需要修改服务器,而不是测试套件。
我又做了一些挖掘。首先,正如我之前所说,send()确实让字符串保持原样。从代码中可以看到: https: //github.com/visionmedia/superagent/blob/master/lib/client.js#L778
因此,您没有告诉服务器请求正文是 JSON 格式,因此您所说的内容被解释为“text/plain”并且不会被解析。要传递手动 JSON 字符串,send()您还需要指定请求的内容类型:
request(config.base)
.post('/authenticate')
.type('json')
.send('{"project":{"description":\'test"}}')
//...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |