request.cookies не определен при использовании Supertest - PullRequest
2 голосов
/ 01 февраля 2020

Я передаю свой токен аутентификации через Cook-only HTTP ie в моем Nest JS API.

Таким образом, при написании некоторых тестов E2E для моих конечных точек Auth, у меня проблема с файлами cookie не там, где я их ожидаю.

Вот мой урезанный тестовый код:

describe('auth/logout', () => {
  it('should log out a user', async (done) => {
    // ... code to create user account

    const loginResponse: Response = await request(app.getHttpServer())
                                              .post('/auth/login')
                                              .send({ username: newUser.email, password });

    // get cookie manually from response.headers['set-cookie']
    const cookie = getCookieFromHeaders(loginResponse);

    // Log out the new user
    const logoutResponse: Response = await request(app.getHttpServer())
                                            .get('/auth/logout')
                                            .set('Cookie', [cookie]);

  });
});

В моей стратегии JWT я использую собственный анализатор cook ie , У меня проблема в том, что request.cookies всегда undefined, когда он попадает в парсер. Тем не менее, повар ie будет присутствовать в request.headers.

Я следую примеру ручного приготовления ie из этой статьи Medium: https://medium.com/@juha.a.hytonen / testing-authenticated-запросы- with-supertest-325ccf47c2bb , и в объекте запроса, по-видимому, отсутствуют другие методы для установки файлов cookie.

Если я проверяю ту же функциональность в Postman, все работает должным образом. Что я делаю не так?

1 Ответ

0 голосов
/ 03 февраля 2020

Согласно статье, за которой вы читаете, код https://medium.com/@juha.a.hytonen / testing-authenticated-request-with-supertest-325ccf47c2bb :
1) имеет 'cook ie' значение в .set('cookie', cookie) в нижнем регистре и в вашем коде это в Pascal регистре ==> Вы пробовали вместо этого использовать в своем коде строчные буквы?
2) повар * Значение 1023 *, присвоенное заголовку 'cook ie', не является массивом, тогда как в вашем коде вы присваиваете массив ==> Вы пробовали использовать значение, не относящееся к массиву?

Итак, чтобы продолжить, можете попробовать следующий код:

describe('auth/logout', () => {
  it('should log out a user', async (done) => {
    // ... code to create user account

    const loginResponse: Response = await request(app.getHttpServer())
                                              .post('/auth/login')
                                              .send({ username: newUser.email, password });

    // get cookie manually from response.headers['set-cookie']
    const cookie = getCookieFromHeaders(loginResponse);

    // Log out the new user
    const logoutResponse: Response = await request(app.getHttpServer())
                                            .get('/auth/logout')
                                            .set('cookie', cookie) // <== here goes the diff
                                            .expect(200, done);

  });
});

Дайте нам знать, если это поможет :)

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