Я разрабатываю Node.js API, и сейчас я создаю тесты, используя supertest для всех маршрутов.
Я нашел лучшую практику использовать фабриканта и фейкер для генерации случайных значений для моделей.
Зная, что Я создал фабрику. 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);
});
Модель: пользователь1
{
name: 'Salvador Costa',
email: 'Warley.Braga@hotmail.com',
password: 'Q4EfvNJv9zulONR'
}
Модель: пользователь2
{
name: 'Salvador Costa',
email: 'Warley.Braga@hotmail.com',
password: 'Q4EfvNJv9zulONR'
}
Так когда второй пост вызывается ошибка, потому что пользователь уже существует.
Знаете ли вы, что я могу сделать, чтобы решить эту проблему?
Спасибо