javascript - 如何测试文档的属性是否更改?
问题描述
我正在为 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
根本没有改变。我的意思是,在数据库上,它发生了变化(该方法正常工作),但在我的测试中,用户对象在请求后没有更新。
换句话说,我在这里要测试的是数据库中文档的状态,而不仅仅是请求返回的内容。关于如何实现这一目标的任何建议?
解决方案
您可以打开更改流并监听您的字段何时更改,然后立即运行比较。
推荐阅读
- spring-mvc - 值未打印在 JSP 页面上
- r - 使用 plot_ly 绘制 3D 回归曲面
- jsp - 如何在不使用 request.setAttribute 的情况下获取 ArrayList 值从 Java 类发送到 Jsp 页面
- performance - 如何减少加载时间
- javascript - 在 AR.js 中加载模型时,显示加载屏幕
- ios - 将 Xamarin WebView Cookie 设置为无缝地对用户进行身份验证,而无需重新输入凭据
- c++ - 我可以让 Eigen::VectorXd 的大小大于大小限制 (2^32) 吗?
- java - 如何让testfx在测试中找到根的fx:id(根是自定义控件)
- redis - 使用 RediSearch 对实体进行简单的字符串和整数索引
- mysql - 替换几个条目