我正在开发一个Node.js API,现在我正在为所有路由创建使用超测试的测试。
知道了这一点,我创建了我的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 =等待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'
}因此,当第二个post被调用时,会发生一个错误,因为用户已经存在了。
你知道我能做什么来解决这个问题吗?
谢谢
发布于 2021-02-22 21:16:31
文档提供了以下示例:
// 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(),
});https://stackoverflow.com/questions/61033408
复制相似问题