2011-07-16 10 views
46

私はかなり初心者のテスターですが、RailsでTDDをより良くしようとしています。MiniTestのセットアップ方法は?

RSpecは素晴らしいですが、テストはかなり遅いです。私はMiniTestのほうがはるかに高速だと聞いたことがあり、MiniTest/Spec DSLは私がRSpecを扱うのに慣れているように見えるので、試してみると思いました。

しかし、Web上でMinitestを設定して実行する方法のウォークスルーを見つけることができませんでした。私はRSpecの本からテストする方法を学びました.Test :: UnitやMiniTestがどのように動作するはずです。私は私のgemfileに宝石を持っていますが、いくつか簡単なテストを書いていますが、どこに置くか、どうやって実行するのか分かりません。私はこれが非常に明白なものだと思っています。

Minitest/specファイルをいくつかセットアップして実行する方法を教えてもらえますか? Rspec?

EDIT

は、具体的にこれらは、私が最も知っておく必要がある基本的には、次のとおりです。

  1. あなたは(spec_helperのように)、あなたはそれを作成するにはどうすればよいので、もしtest_helperファイルが必要ですか?
  2. minitestをどのように実行しますか?rspec specまたはrspec path/to/file_spec.rbと同等のものはありません。何が欠けていますか?

ありがとう!

+1

開始点:http://metaskills.net/2011/03/26/using-minitest-spec-with-rails/ – kain

+1

Kain、ありがとう。私はこの投稿を見ました...残念ながら、最も基本的なステップはカバーしていません:あなたはspec_helperのようなtest_helperファイルが必要ですか?もしそうなら、あなたはどのように作成しますか?そして、**あなたはどのようにミニット**を稼働させていますか? 'rspec spec'や' rspec path/to/file_spec.rb'と等価ではないようです。それは私が本当に執着していることです。 – Andrew

+0

これは価値があるのですが、この質問には2つの意見と好きなものがありますが、アップアップはありません。今すぐジャングルで迷子になってしまいました。もしあなたがこの質問が人の前に戻ってくるようにアップしてください。 – Andrew

答えて

39

この質問は、ディレクトリレイアウト与え、Rubyの1.9.3およびレーキ0.9.2.2を使用してHow to run all tests with minitest?

に似ています

require 'minitest/spec' 
require 'minitest/autorun' # arranges for minitest to run (in an exit handler, so it runs last) 

require 'alpha' 

describe 'Alpha' do 
    it 'greets you by name' do 
    Alpha.new.greet('Alice').must_equal('hello, Alice') 
    end 
end 

ここ
Rakefile 
lib/alpha.rb 
spec/alpha_spec.rb 

alpha_spec.rbがどのようなものであるかである。このようなrake test

  • つのテスト:ruby -Ilib spec/alpha_spec.rb

  • そして、ここではあなたが

    • すべてのテストを実行することができますRakefile

      require 'rake' 
      require 'rake/testtask' 
      
      Rake::TestTask.new do |t| 
          t.pattern = 'spec/**/*_spec.rb' 
      end 
      

      です

      spec_helper.rbをminitestとよく使うかどうか分かりません。それを読み込むための便利な方法はないようです。 Rakefileにこれを追加します。次に

      require 'rake' 
      require 'rake/testtask' 
      
      Rake::TestTask.new do |t| 
          t.pattern = 'spec/**/*_spec.rb' 
          t.libs.push 'spec' 
      end 
      

      spec/spec_helper.rb様々な冗長なものを含めることができます。

      require 'spec_helper' 
      
      • すべてのテスト:

        require 'minitest/spec' 
        require 'minitest/autorun' 
        require 'alpha' 
        

        そしてspec/alpha_spec.rbが持つ冗長な部分を置き換えrake test

      • 1は、テスト:RSpecののruby -Ilib -Ispec spec/alpha_spec.rb
    +0

    非常に有用で非常に徹底した、ありがとうパトリック! – Andrew

    4

    使用しているRubyのバージョンは何ですか?

    私が理解しているところでは、1.9は、を完全に下位互換性のあるAPIに置き換えたMiniTestを導入しました。あなたが1.9でRailsアプリケーションがTest::Unitを参照している場合は、実際にはすでにMiniTestが使用されています。

    は、あなたのRubyのソースを見てみましょう - 1.9.2用test/unit.rbは、以下が必要としています

    require 'minitest/unit' 
    require 'test/unit/assertions' 
    require 'test/unit/testcase' 
    

    そしてtest/unit/assertionsMiniTest::Assertionsが含まれています。


    テストをより速く実行することは、他のすべての暗い芸術です。 sporkwatchrを見てください。前者はテストスイートを実行する前にアプリを初期化し、修正したファイルやフォークを再ロードします。後者はレポ内のファイルを監視し、関連するテストケースを自動的に実行します。

    これらは一緒になって、かなり意味のあるTDDセットアップを提供します。新しいモデルのテストケースを作成すると、自動的に実行され、失敗します。その後、関連するモデルを保存するたびに、そのテストケースが非常に迅速に再実行されます。あなたは赤/緑かどうかの即時フィードバックを得ることができます。

    彼らはセットアップをして一緒にうまく動作するように少し微妙ですので、あなたが立ち往生したらいくつかの質問でもう一度チェックしてください。

    運が良かった!

    4

    watchrまたはsporkはテストを実行するための要件ではありません。自動テストを行う上で便利です。しかし、あなたはMiniTest一連のテストを実行することができます最も基本的な方法は、ルビー自体である:

    $ ruby myfileoftests.rb 
    
    1

    新しいバージョン(2.8以降2012年1月発売)の劇的な高速化を持っています。 Hereは、パフォーマンスの違いの調査とMiniTestとの比較です。

    また、私は012TRyan BatesのスクリーンキャストがMiniTestの優れた紹介であることを発見しました。これはプロのビデオの1つで、視聴するには購読する必要があります。

    3

    minitest-railsとしてください。それは、Railsアプリケーション用のMinitestを設定するプロセスを順を追って説明します。

    http://www.youtube.com/watch?v=xA2f2zBNvsc

    チュートリアルでは、ヘルパーファイルを作成する方法だけでなく、rakeタスクを使用してテストを実行する方法を示しています。あなたは以下を行うことができ、特定のテストを実行する場合:すべての私のMinitestファイルを実行するには

    task :default => :test 
    task :test do 
        Dir.glob('./test/*_test.rb').each { |file| require file} 
    end 
    

    ruby -Itest test/models/user_test.rb 
    
    1

    をここに私は私の上のディレクトリに置く私の全体rakefile、ありますすぐに、私はrakeとタイプします。それでおしまい!

    各Minitestファイルの上部にrequire 'minitest/autorun'があることを確認してください。 Dir.globは間違いなくMinitestで動作します。

    私のすべてのテストメソッドの名前を持つ、きれいな着色Minitest出力を取得するには、私は/ testディレクトリにminitest_helper.rbというファイルを持っています。 (宝石minitest-記者をインストールする必要がありました):

    require 'minitest/reporters' 
    Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) 
    require 'minitest/autorun' 
    

    私はちょうど私のテストファイルのそれぞれの上部にrequire_relative './minitest_helper'に持っていました。

    関連する問題