Уведомления
Очистить всё
Тестирование
2
Сообщения
2
Пользователи
1
Реакции
370
Просмотры
3 ноября 2024 23:40
пишу тесты для своего бота с расписанием (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 ответ
3 ноября 2024 23:48
Это два разных создания, и выполнятся оба. let! по сути тот же before, который ещё и запоминает результат под именем group. Оставьте что-то одно: если запись нужна в тесте по имени, то let!, если она должна просто лежать в базе, то before. Я сама на этом спотыкалась в первые месяцы. И рядом ещё одна ловушка: обычный let без восклицательного знака ленивый, он создаст запись только тогда, когда вы впервые напишете group в тесте. Если в тесте group не упоминается, записи в базе не будет вовсе, и тест на поиск упадёт уже с нулём.