Почему MiniTest намного лучше, чем RSpec

Простота

Когда я начал программировать профессионально, я писал на Python, и я всегда завидовал среде тестирования Ruby RSpec, когда смотрел видео RubyConf/RailsConf, но в то время я писал тесты, как показано ниже.

def test_that_it_returns_a_list_of_authors():
    authors = get_authors_with_names_that_start_with('M')
    assert isinstance(authors, list)


def test_that_it_returns_a_list_of_books():
    books = search_for_books_by_author('Damian Marrett')
    assert isinstance(books, list)


def test_that_it_returns_an_html_element():
    URL = '
    response = requests.get(URL)
    assert isinstance(create_html_element_from(response), HtmlElement)

Как видите, я не знал, что такое тестирование, и в тот момент я был просто в восторге от тестирования. После того, как в последние годы я перешел на Ruby и Ruby On Rails и начал писать спецификации и тесты для приложений, я понял, что существует большая разница между MiniTest и RSpec. какая-то сумасшедшая магия метапрограммирования под капотом.

cloc-minitest-rspec.png

Кривая обучения

Просто выучить Руби? Хорошо, не нужно изучать новый фреймворк, это просто синтаксис Ruby + новые методы, и на самом деле это одна из причин, по которой Google изобрел простой и глупый язык под названием Golang вместо волшебного, чтобы помешать разработчикам творить чудеса и просто добавлять функции вместо того, чтобы играть с ними. DSL.

RSpec.describe Foo, type: :model do
  include_context 'sync something'

  describe 'associations' do
    it { is_expected.to belong_to(:bar) }
    it { is_expected.to belong_to(:baz).optional }
    it { is_expected.to belong_to(:user).optional }
    it { is_expected.to belong_to(:category).class_name('Something').optional }
  end
end

Что такое include_context? Что такое is_expected? Как я могу идентифицировать SUT (тестируемую систему), если я ее не вижу? Почему я должен заботиться о внутренних объектах, таких как имя класса class_name?

class FooTest < MiniTest::Test
  def setup
    @foo = Foo.new
    @foo.sync_with_api
  end

  def test_should_belong_to_bar
    assert @foo.bar.present?
  end

  def test_should_belong_to_baz
    assert @foo.baz.present?
  end

  def test_should_belong_to_baz
    assert @foo.baz.present?
  end

  def test_should_belong_to_category
    assert @foo.categories.present?
  end
end

Хм? загрузка простого объекта, синхронизация с некоторым API и проверка наличия каких-либо ассоциаций имеют смысл.

Не нужно устанавливать границы для ваших тестов, потому что ваши коллажи не могут пойти не так с MiniTest или использовать нестандартный способ написания тестов, ПРОСТО ПРОСТОЙ РУБИН.

Надеюсь, вам понравится 🍕

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *