Как проверить, изменилось ли свойство документа? - PullRequest
0 голосов
/ 27 апреля 2020

Я пишу тесты для 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 не меняется вообще. Я имею в виду, что в базе данных она меняется (метод работает правильно), но в моем тесте пользовательский объект не обновляется после запроса.

Другими словами, здесь я хочу проверить состояние документа в базе данных, а не только то, что возвращает запрос. Любые предложения о том, как этого добиться?

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете открыть поток изменений и прослушать, когда ваши поля будут изменены, а затем запустить сравнение прямо сейчас.

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