Я пишу тесты для Express приложения CRUD. Приложение имеет маршрут восстановления учетной записи, который принимает запросы POST с электронным письмом в теле. Он ищет пользователя с данным адресом электронной почты, изменяет его пароль, затем отправляет электронное письмо с новым паролем и возвращает 200.
Поэтому я хочу написать тест, который проверяет, действительно ли пароль пользователя изменился.
Это была моя попытка:
Сначала я создал фабрику пользователей, используя factory-girl
lib.
// factory.js file
const { factory } = require('factory-girl');
const User = require('../../models/User');
factory.define('User', User, {
email: factory.sequence('User.email', n => `fakeuser${n}@mail.com`),
name: factory.chance('name'),
password: factory.chance('word')
});
module.exports = factory;
Приятно. Затем я написал тест:
// One test inside my test suite
it('should return 200 and change user\'s password', async () => {
const user = await factory.create('User');
const oldPassword = user.password;
const response = await request(app)
.post(endpoint)
.send({ email: user.email });
const passwordChanged = oldPassword !== user.password;
expect(response.status).toBe(200);
expect(passwordChanged).toBe(true);
await user.remove();
});
Но passwordChanged
всегда оценивается как false
, поскольку user.password
не меняется вообще. Я имею в виду, что в базе данных она меняется (метод работает правильно), но в моем тесте пользовательский объект не обновляется после запроса.
Другими словами, здесь я хочу проверить состояние документа в базе данных, а не только то, что возвращает запрос. Любые предложения о том, как этого добиться?