20

最近、Minitest に関する記事をかなり読みました。超軽量のテスト フレームワークのアイデアがとても気に入っています。私は最近のプロジェクトで rspec をそれに置き換えることにしましたが、すべてをうまく機能させることができませんでした。私の問題は

a) 承認/統合テストで名前付きルートを取得する (rspec と test::unit はそれらを自動的に含めるように見えますが、minitest ではうまくいきません)、
b) レールでの採用の全体的な欠如は私を不安にさせます (誰もが rspec を使用しているようです) gem/libraries でより多く使用されますが)。

Railsアプリケーションのテストでrspecが主な優位性を持っている場合、minitestを使用する価値はありますか?

4

5 に答える 5

24

私は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

可決

Rails 4 に近づくにつれて、Rails で Minitest を使用することへの注目が高まり続けると思います。

価値がある?

Minitest から始めることは、それだけの価値があると思います。Minitest では現在、途方もない活動が行われています。これは、最近注目されている高速テストにもうまく対応しています。しかし、それはアプリとチームのダイナミクスに大きく依存します。

于 2012-07-27T15:56:19.310 に答える
21

最近、アプリケーションを Rspec から Minitest に切り替えましたが、それだけの価値がありました。テストははるかに高速に実行され、構文はよりスマートで無駄のないコードを促進し、どういうわけか今ではスイートに自信が持てるようになりました (仕事の魔法が減りました)。

改善は統合/受け入れテストにまで及びます。私は、Capybara を使用した Minitest が Cucumber よりもはるかに読みやすく、簡単である (そして脆弱性がはるかに少ない) ことを発見しました。

以下は、 spec 構文を使用して 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ブロックがエラーをスローする
于 2012-02-10T01:44:12.720 に答える
4

私は先日、minitest で Rails をテストするのをより簡単にするためにいくつかの作業を行いました。詳細については、 http://rawonrails.blogspot.com/2012/01/better-way-of-testing-rails-application.htmlをご覧ください。

于 2012-01-12T01:38:30.207 に答える
3

minitest -rails gem はこれを簡単にします。

于 2012-07-21T03:29:44.513 に答える
1

Ningjaの「Rails3.1でのCapybaraを使用したMiniTest::Specセットアップ」のコーディングは、MinitestをRailsと統合するのに大いに役立ちました。

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

于 2011-10-17T01:29:42.277 に答える