如何使用Mocha和Supertest发送格式错误的JSON?

如何使用Mocha和Supertest发送格式错误的JSON?,json,node.js,mocha.js,supertest,Json,Node.js,Mocha.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)

我有要运行的当前测试:

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

然而,supertest似乎验证了它,它只是在主体中发送“{}”。知道我该如何解决这个问题吗?

您正在将字符串传递给
send
方法,因此它将按原样发送到服务器(您可以在那里写入任何内容!)

一旦服务器接收到字符串,它就会解析JSON并找到错误。接下来会发生什么取决于服务器应用程序的配置方式(或您正在使用的框架)。在这种情况下,服务器可能会忽略任何格式错误的JSON输入,因此就像您在没有任何输入的情况下调用了
/authenticate

TL;DR:
send()
只发送您传递的任何字符串。如果要引发错误,则需要修改服务器,而不是测试套件

编辑 我又挖了一些。首先,正如我前面所说,
send()
确实保留了字符串。您可以从代码中看到它:

也就是说,您没有告诉服务器请求主体是JSON格式的,因此您所说的内容被解释为“text/plain”,而不是解析。要将手动JSON字符串传递给
send()
,还需要指定请求的内容类型:

request(config.base)
    .post('/authenticate')
    .type('json')
    .send('{"project":{"description":\'test"}}')
//...

我已经在服务器上编写了处理错误的JSON的方法,这就是我要测试的,以防止将来有人破坏这部分代码。我需要知道如何编写测试来发送格式错误的JSON,而不是如何处理它。