Запускаем в команде третий сервис, небольшой, на Rails 8.0. Два основных на RSpec, все шестеро к нему привыкли. В новом приложении из коробки Minitest и фикстуры, и двое ребят предлагают не тащить RSpec, а пожить на стандарте. Аргумент против: два стиля тестов в одной команде, ревьюить и переключаться сложнее. Кто жил на двух сразу, как оно?
Жил. Первые две недели раздражает, потом голова переключается так же, как между Ruby и SQL. Minitest проще внутри: тест это класс, проверка это метод, никаких let и context на пять уровней вложенности. Для маленького сервиса я бы оставил стандарт, меньше зависимостей обновлять при каждом мажоре.
Как тестировщица я бы выбрала RSpec, но по одной причине: системные тесты и общие хелперы проще переносить между проектами, когда стиль один. Если в новом сервисе системных тестов почти не будет, разницы нет. Матчеров в Minitest меньше, это да, вместо have_content будет assert_text, но привыкаешь за день.
Я пришла в Ruby из Go и сразу попала на Minitest, а RSpec видела в основном на собеседованиях. Мне Minitest нравится тем, что читается как обычный Ruby. Типичный тест выглядит так:
class InvoiceTest < ActiveSupport::TestCase
test "скидка округляется до копейки" do
invoice = invoices(:draft)
invoice.amount_cents = 1_999
invoice.discount_percent = 15
assert_equal 1_699, invoice.total_cents
end
test "нельзя оплатить отменённый счёт" do
assert_raises(Invoice::AlreadyCanceled) { invoices(:canceled).pay! }
end
end
Никакой магии, всё видно глазами. Для системных тестов assert_text и assert_selector хватает, по have_content я не скучаю.
в Go один пакет testing на всех, и спорить не о чем. чем меньше способов, тем короче ревью
с нуля на Rails 8 я бы тоже взял Minitest: генераторы, фикстуры и параллельный запуск там уже настроены
Решили так: новый сервис на Minitest, factory_bot туда не тащим и «свой RSpec» поверх Minitest из хелперов не пишем. Через три месяца соберёмся и посмотрим, мешает ли. Если будет мешать, переведём, пока там 80 тестов, это вечер работы.