обучение тестированию в 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();
},
Спасибо!