Третий сервис в ком...
 
Уведомления
Очистить всё

Третий сервис в команде: RSpec по привычке или Minitest из коробки Rails 8?

8 Сообщения
7 Пользователи
10 Реакции
447 Просмотры
Егор64
Сообщения: 30
Автор темы
Читает чужие PR тимлид
Присоединился: 3 года назад
[#88]

Запускаем в команде третий сервис, небольшой, на Rails 8.0. Два основных на RSpec, все шестеро к нему привыкли. В новом приложении из коробки Minitest и фикстуры, и двое ребят предлагают не тащить RSpec, а пожить на стандарте. Аргумент против: два стиля тестов в одной команде, ревьюить и переключаться сложнее. Кто жил на двух сразу, как оно?


7 ответов
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

Жил. Первые две недели раздражает, потом голова переключается так же, как между Ruby и SQL. Minitest проще внутри: тест это класс, проверка это метод, никаких let и context на пять уровней вложенности. Для маленького сервиса я бы оставил стандарт, меньше зависимостей обновлять при каждом мажоре.


Ответ
Ксения 90
Сообщения: 18
Пишет тесты QA-автоматизатор
Присоединился: 4 года назад

Как тестировщица я бы выбрала RSpec, но по одной причине: системные тесты и общие хелперы проще переносить между проектами, когда стиль один. Если в новом сервисе системных тестов почти не будет, разницы нет. Матчеров в Minitest меньше, это да, вместо have_content будет assert_text, но привыкаешь за день.


Ответ
tatiana.golubeva
Сообщения: 5
Дружит с bundler бэкенд-разработчица
Присоединился: 1 год назад

Я пришла в 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 я не скучаю.


Ответ
1 ответ
Валерий40
Присоединился: 4 года назад

Читает чужие PR фулстек-разработчик
Сообщения: 33

Автор: tatiana.golubeva
читается как обычный Ruby
Вот и мне это ближе, после PHPUnit Minitest показался почти родным. RSpec мне потом достался на другом проекте, и я его месяца три учил как отдельный язык: subject, let, shared_examples. До сих пор иногда пишу is_expected не там, где надо.


Ответ
artem_67
Сообщения: 18
Пишет тесты разработчик на Go
Присоединился: 4 года назад

в Go один пакет testing на всех, и спорить не о чем. чем меньше способов, тем короче ревью


Ответ
gosha70
Сообщения: 17
Пишет тесты бэкенд-разработчик, удалёнка
Присоединился: 3 года назад

с нуля на Rails 8 я бы тоже взял Minitest: генераторы, фикстуры и параллельный запуск там уже настроены


Ответ
Егор64
Сообщения: 30
Автор темы
Читает чужие PR тимлид
Присоединился: 3 года назад

Решили так: новый сервис на Minitest, factory_bot туда не тащим и «свой RSpec» поверх Minitest из хелперов не пишем. Через три месяца соберёмся и посмотрим, мешает ли. Если будет мешать, переведём, пока там 80 тестов, это вечер работы.


Ответ