let! и before в одн...
 
Уведомления
Очистить всё

let! и before в одном тесте: почему запись создаётся два раза

2 Сообщения
2 Пользователи
1 Реакции
370 Просмотры
Максим О
Сообщения: 22
Автор темы
Собрал свой gem студент
Присоединился: 2 года назад
[#56]

пишу тесты для своего бота с расписанием (sinatra, activerecord, sqlite, rspec). не понимаю, почему в этом тесте в базе две группы, а не одна:

let!(:group) { Group.create!(name: "ИВТ-21") }

before do
  Group.create!(name: "ИВТ-21")
end

it "находит группу по названию" do
  expect(Group.where(name: "ИВТ-21").count).to eq(1)
end

думал, let! и before это одно и то же и второй раз не создастся


1 ответ
lena_bogatyreva
Сообщения: 27
Читает чужие PR бэкенд-разработчица
Присоединился: 3 года назад

Это два разных создания, и выполнятся оба. let! по сути тот же before, который ещё и запоминает результат под именем group. Оставьте что-то одно: если запись нужна в тесте по имени, то let!, если она должна просто лежать в базе, то before. Я сама на этом спотыкалась в первые месяцы. И рядом ещё одна ловушка: обычный let без восклицательного знака ленивый, он создаст запись только тогда, когда вы впервые напишете group в тесте. Если в тесте group не упоминается, записи в базе не будет вовсе, и тест на поиск упадёт уже с нулём.


Ответ