Как я могу сказать Supertest не отправлять куки с запросом? - PullRequest
0 голосов
/ 24 января 2019

обучение тестированию в Node прямо сейчас с Mocha и Supertest.

Проблема

Я хочу проверить регистрацию пользователя и существует ли пользователь на БД. Но прежде чем проверить это, я также проверяю на res.cookie.id. Потому что, если это установлено, я отвечаю другим сообщением типа User is already signed in Но в тесте я хочу избавиться от куки, потому что я даже не попал в промежуточное ПО, которое проверяет, находится ли пользователь на БД.

Вот так выглядит мой тест прямо сейчас:

describe("Controller function to check if user exists", () => {
  beforeEach(done => {
    request(app)
      .post("/user/register")
      .send({
        username: "dhuber126",
        email: "dhuber126@gmail.com",
        password: "asfsdf4441!!!"
      })
      .set("Accept", "application/json")
      .unset("Cookie")
      .then(res => done());
  });

  it("should return with 400 and that the user already exists", done => {
    request(app)
      .post("/user/register")
      .send({
        username: "dhuber126",
        email: "dhuber126@gmail.com",
        password: "asfsdf4441!!!"
      })
      .set("Accept", "application/json")
      .set("set-cookie", null)
      .expect(400, '"User is already existing in the database"', done);
  });
});

Тест не проходит так:

Ошибка: ожидается '' Пользователь уже существует в базе данных '' 'тело ответа получено>' 'Пользователь уже вошел в систему' ' + ожидается - актуально

Таким образом, промежуточное программное обеспечение, где оно проверяет, вошел ли пользователь в систему, запускается первым и не подходит ко второму промежуточному программному обеспечению. Я думаю, что единственный способ решить эту проблему - исключить куки-файл из запроса, поэтому серверная часть видит, что в объекте req нет req.cookie.id.

Как мне этого добиться? Я попробовал несколько вещей:

Что я пробовал :

Я пробовал .set("cookie", null) и .set("set-cookie", null" Также я попробовал unset("cookie"), так как это метод на объекте request из supertest (но не указан в документации). Но ничего не работает.

Как мне этого добиться?

Вот мои 2 промежуточных ПО контроллера:

isAlreadyLoggedIn: async (req, res, next) => {
    const { id } = res.cookie;
    if (id) {
      res.status(400).json("User is already signed in");
      return;
    }
    next();
  },
  isAlreadyExisting: async (req, res, next) => {
    const user = await User.findOne({ email: req.body.email });

    if (user) {
      res.status(400).json("User is already existing in the database");
      return;
    }

    next();
  },

Спасибо!

...