Jest-тест не проходит через какие-либо параметры (становится неопределенным) - PullRequest
1 голос
/ 09 апреля 2020

РЕДАКТИРОВАТЬ: Переменная username становится undefined по некоторым причинам. Я также попытался передать другие переменные, но ни одна из них не появилась так, как должна с console.log().

У меня есть файл шуток ("index.test. js") для тестирования мой API:

'use strict';

const request = require('supertest');
const app = require('./index');

describe('Test login', () => {
  test('POST /login', () => {
        return request(app)
             .post('/login')
             .send({username: 'preset1'})  //suggestion by @acincognito
             .expect(301)

    });

});

и соответствующий маршрут POST в моем nodejs файле ("index. js") :

...

function contains(arr, key, val) {
    for (var i = 0; i < arr.length; i++) {
        if(arr[i][key] === val) {
            return true
        }; 
    }
    return false;
}

app.post("/login", async (req, res) => {
    try {
      var username = req.body.username;
      const data = await readFile("results.json");
      var json = JSON.parse(data);
      if (contains(json, "name", username) === true){

         ...

         return res.redirect(301,"/");
       } else {
         return res.redirect(401,"/");
       }
    } catch (error) {
        return res.redirect("/");
    }
});

JSON file ("results. json") имеет следующий формат:

[
  {"name":"preset1","otherstuff":[]},
  ...
  {"name":"preset5","otherstuff":[]}
]

Я получаю сообщение об ошибке:

expected 301 "Moved Permanently", got 401 "Unauthorized"

ПРИМЕЧАНИЕ: Когда я запускаю код вручную на локальном сервере, все работает как надо, что, по-видимому, противоречит выводу теста.

Ответы [ 2 ]

1 голос
/ 12 апреля 2020
1 голос
/ 09 апреля 2020

Добавьте console.log(json) к вашей функции app.post, чтобы увидеть, что анализируется.

После просмотра документов для supertest: очевидно, .set('username','preset1') для установки заголовков в вашем запросе, но в соответствии с ваш app.post username находится внутри тела запроса, поэтому попробуйте .send({username: 'preset1'}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...