node.js - 节点JS | 开玩笑| 工厂女孩 | Faker:Faker 生成相同的值
问题描述
我正在开发一个 Node.js API,现在我正在使用supertest为所有路由创建测试。
我发现最好的做法是使用factory-girl和faker为模型生成随机值。
知道了这一点,我创建了factory.js:
import faker from 'faker/locale/pt_BR';
import { factory } from 'factory-girl';
import User from '../src/app/models/User';
factory.define('User', User, {
name: faker.name.findName(),
email: faker.internet.email(),
password: faker.internet.password(),
});
export default factory;
当我执行一次时,它的作品很漂亮:
it('should be able to register', async () => {
const user = await factory.attrs('User');
const response = await request(app)
.post('/users')
.send(user);
expect(response.body).toHaveProperty('id');
});
行const user = await factory.attrs('User'); 返回以下模型:
{
name: 'Sra. Dalila Pereira',
email: 'Jlia68@bol.com.br',
password: 'zhpMclO9KwWfhlt'
}
但是如果我两次调用相同的指令,模型将是相等的:
it('should return all users', async () => {
const user1 = await factory.attrs('User');
await request(app)
.post('/users')
.send(user1);
const user2 = await factory.attrs('User');
await request(app)
.post('/users')
.send(user2);
const response = await request(app)
.get('/users')
.set('Authorization', `Bearer ${token}`);
expect(response.status).toBe(200);
});
型号:user1
{
name: 'Salvador Costa',
email: 'Warley.Braga@hotmail.com',
password: 'Q4EfvNJv9zulONR'
}
型号:user2
{
name: 'Salvador Costa',
email: 'Warley.Braga@hotmail.com',
password: 'Q4EfvNJv9zulONR'
}
因此,当调用第二个帖子时会发生错误,因为用户已经存在。
你知道我能做些什么来解决这个问题吗?
谢谢
解决方案
该文档提供了此示例:
// Using objects as initializer
factory.define('product', Product, {
// use sequences to generate values sequentially
id: factory.sequence('Product.id', (n) => `product_${n}`),
// use functions to compute some complex value
launchDate: () => new Date(),
// ...
})
该launchDate
字段是按调用计算的。
伪造者也应该如此。为了保证每次都有一个新鲜的值,尝试提供一个箭头函数。
factory.define('User', User, {
name: () => faker.name.findName(),
email: () => faker.internet.email(),
password: () => faker.internet.password(),
});
推荐阅读
- powerbi - 在 PowerBI 中对列进行“或”过滤
- python - 不发送所有文本
- javascript - 无法在点击时添加我们自己的反应元素
- html - 具有固定最大宽度和高度的图像,原始纵横比:避免布局偏移
- javascript - 在 API 获取请求上传递请求参数
- vba - 类型不匹配将字符串转换为日期
- java - 如何使用游标从sqlite android中的多个列中获取数据
- apache-spark - 使用 pyspark 将字符串转换为日期时间时为空值
- vba - 记录的一些 Array 公式未转换为公式,而是保留为 RC 格式
- c++ - 在 RISC-V 中这条指令执行结束时 x12 的值是多少?(没有 RARS)