【问题标题】:How to test if a document's property changed?如何测试文档的属性是否更改?
【发布时间】:2020-04-27 10:46:18
【问题描述】:

我正在为 Express CRUD 应用程序编写测试。该应用程序有一个帐户恢复路线,该路线接受正文中带有电子邮件的 POST 请求。它使用给定的电子邮件搜索用户,更改其密码,然后使用新密码发送电子邮件并返回 200。

所以我想编写一个测试来检查用户的密码是否确实已更改。

这是我的尝试:

首先,我使用 factory-girl 库创建了一个用户工厂。

// 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 根本没有改变。我的意思是,在数据库上,它发生了变化(该方法正常工作),但在我的测试中,用户对象在请求后没有更新。

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

【问题讨论】:

  • 你应该在测试中模拟数据库。

标签: javascript node.js mongodb express jestjs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-05-29
    • 2019-08-18
    • 1970-01-01
    • 2015-03-22
    • 2019-04-24
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多