Я использую jest 23.1.0
и supertest 3.1.0
. Я пишу несколько тестов для своего бэкэнда, и все идет хорошо, однако для конкретного случая конкретного маршрута тест не пройден, даже если объект ответа содержит правильную информацию. Тест должен проверить, является ли параметр допустимым JSON и имеет ли он такой вид:
describe('GET /graph', () => {
it('invalid JSON', (done) => {
request(app)
.get('/graph')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(415)
.then(done);
});
});
В этом случае я вообще не посылаю никаких параметров, но даже если я отправляю неверный JSON, проблема та же. В обоих случаях в любом случае запускается одна и та же внутренняя проверка:
module.exports = (req, res, next) => {
let dataParameters;
try {
dataParameters = JSON.parse(req.query.dataParameters);
}
catch(error) {
return(res.status(415).send({
message: "Request parameters are not a valid JSON object",
other: `${error.name} - ${error.message}`
}));
}
...
Когда я запускаю jest, тест не пройден, и вывод на консоль выглядит так:
GET /graph
✕ invalid JSON (6ms)
● GET /graph › invalid JSON
Failed: Object {
"header": Object {
"connection": "close",
"content-length": "125",
"content-type": "application/json; charset=utf-8",
"date": "Tue, 26 Jun 2018 13:58:48 GMT",
"etag": "W/\"7d-GGhtZ8CfzWfmANZW28JTNC5bNjU\"",
"x-powered-by": "Express",
},
"req": Object {
"data": undefined,
"headers": [Object],
"method": "GET",
"url": "http://127.0.0.1:35875/graph",
},
"status": 415,
"text": "{\"message\":\"Request parameters are not a valid JSON object\",\"other\":\"SyntaxError - Unexpected token u in JSON at position 0\"}",
}
at Env.fail (node_modules/jest-jasmine2/build/jasmine/Env.js:537:34)
Так что, глядя на объектную распечатку, кажется, что маршрут возвращает правильное состояние HTTP и сообщение, однако вместо супериспытания это само по себе не проходит. Я использую тот же формат ответа и технику тестирования для тестирования других ошибок API, но этого не происходит. Я пытался изменить параметры request
, коды ошибок и многое другое, но безрезультатно.