Ошибка тестирования API с супер-тестом и сбоем, даже если ответ правильный - PullRequest
0 голосов
/ 26 июня 2018

Я использую 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, коды ошибок и многое другое, но безрезультатно.

1 Ответ

0 голосов
/ 13 июля 2018

У меня были проблемы с передачей параметров в Done (), что вызывало похожую проблему.

Попробуйте изменить

.then(done)

до

.then(() => { done() })

и посмотрим, исправит ли это вас.

...