首页 > 解决方案 > 如何测试文档的属性是否更改?

问题描述

我正在为 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();
});

ButpasswordChanged总是被评估为false,因为user.password根本没有改变。我的意思是,在数据库上,它发生了变化(该方法正常工作),但在我的测试中,用户对象在请求后没有更新。

换句话说,我在这里要测试的是数据库中文档的状态,而不仅仅是请求返回的内容。关于如何实现这一目标的任何建议?

标签: javascriptnode.jsmongodbexpressjestjs

解决方案


您可以打开更改流并监听您的字段何时更改,然后立即运行比较。


推荐阅读