Использование Minitest в Rails - PullRequest
20 голосов
/ 02 октября 2011

Недавно я прочитал довольно много статей о Minitest.Мне очень нравится идея суперлегкого тестового фреймворка.Я решил заменить rspec на него в недавнем проекте, и мне не повезло заставить все это работать.Мои проблемы:

a) получение именованных маршрутов в моих приемочных / интеграционных тестах (rspec и test :: unit, кажется, автоматически включают их, но не идут с minitest),
b) и общее отсутствие принятияв rails мне не по себе (кажется, что все используют rspec, хотя он больше используется с гемами / библиотеками).

Стоит ли использовать minitest, когда rspec доминирует в тестировании приложений rails?

Ответы [ 5 ]

24 голосов
/ 27 июля 2012

Я автор minitest-rails .С тех пор, как вы изначально просили об этом, многое изменилось.Мой ответ предполагает, что вы используете minitest-rails.

Именованные маршруты

Если вы используете minitest-rails, это просто работает (сейчас).Вы можете использовать генераторы для создания этих тестов или написать их самостоятельно.Все указанные маршруты доступны в ваших приемочных / интеграционных тестах.

require "minitest_helper"

describe "Homepage Acceptance Test" do
  it "must load successfully" do
    get root_path
    assert_response :success
  end
end

Принятие

Я думаю, что мы будем продолжать уделять повышенное внимание использованию Minitest с Rails по мере приближения к Rails 4.

Стоит ли это?

Я думаю, что начинать с Minitest сейчас вполне стоит.Сейчас в Minitest происходит огромная активность.Это хорошо согласуется с недавним акцентом на быстрые тесты.Но это действительно зависит от вашего приложения и динамики команды.

21 голосов
/ 10 февраля 2012

Я недавно переключил приложение с Rspec на Minitest, и оно того стоило. Тесты выполняются на намного быстрее, синтаксис поощряет более умный и тонкий код, и почему-то у меня теперь больше уверенности в наборе (меньше магии в работе).

Улучшение распространяется на интеграционное / приемочное тестирование. Я считаю, что Minitest с Capybara намного более читабелен и понятен, чем Cucumber (и гораздо менее хрупок).

Ниже приведен вспомогательный файл, который должен быть всем, что вам нужно для получения модульных, функциональных и интеграционных тестов, запущенных с Minitest с использованием синтаксиса спецификации . Это было основано на сути @tenderlove & много чтения / экспериментов. Примечания и предостережения ниже.

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)

require 'rubygems'
gem 'minitest'
require 'minitest/autorun'
require 'action_controller/test_case'

require 'miniskirt'
require 'capybara/rails'
require 'mocha'
require 'turn'

# Support files
Dir["#{File.expand_path(File.dirname(__FILE__))}/support/*.rb"].each do |file|
  require file
end


class MiniTest::Spec
  include ActiveSupport::Testing::SetupAndTeardown

  alias :method_name :__name__ if defined? :__name__
end


class ControllerSpec < MiniTest::Spec
  include Rails.application.routes.url_helpers
  include ActionController::TestCase::Behavior

  before do
    @routes = Rails.application.routes
  end
end

# Test subjects ending with 'Controller' are treated as functional tests
#   e.g. describe TestController do ...
MiniTest::Spec.register_spec_type( /Controller$/, ControllerSpec )


class AcceptanceSpec < MiniTest::Spec
  include Rails.application.routes.url_helpers
  include Capybara::DSL

  before do
    @routes = Rails.application.routes
  end
end

# Test subjects ending with 'Integration' are treated as acceptance/integration tests
#   e.g. describe 'Test system Integration' do ...
MiniTest::Spec.register_spec_type( /Integration$/, AcceptanceSpec )


Turn.config do |c|
  # use one of output formats:
  # :outline  - turn's original case/test outline mode [default]
  # :progress - indicates progress with progress bar
  # :dotted   - test/unit's traditional dot-progress mode
  # :pretty   - new pretty reporter
  # :marshal  - dump output as YAML (normal run mode only)
  # :cue      - interactive testing
  c.format  = :cue
  # turn on invoke/execute tracing, enable full backtrace
  c.trace   = true
  # use humanized test names (works only with :outline format)
  c.natural = true
end

Примечания

  • Предназначен для использования в Rails 3.1 или 3.2. Не пробовал ниже этого.
  • gem 'minitest' необходим для получения более продвинутой функциональности Minitest (let блоков и т. Д.)
  • Здесь используются мокко (более полные насмешки / заглушки), мини-юбка (factory_girl lite) и бегун нового хода. Ни одна из этих зависимостей.
  • Начиная с Rails 3.2, вложенные блоки describe в тестах контроллера выдают ошибку
4 голосов
/ 12 января 2012

В последние дни я проделал некоторую работу, чтобы сделать тестирование Rails с minitest намного проще. Пожалуйста, посмотрите на http://rawonrails.blogspot.com/2012/01/better-way-of-testing-rails-application.html, чтобы найти больше.

3 голосов
/ 21 июля 2012

Камень minitest-rails делает это простым.

1 голос
/ 17 октября 2011

Кодирование Настройка MiniTest :: Spec от Ningja с Capybara в Rails 3.1 очень помогла с интеграцией Minitest с Rails.

http://code -ningja.posterous.com / 73460416

...