私はかなり初心者のテスターですが、RailsのTDDでより良くなるように努めています。
RSpecはうまく機能しますが、私のテストはかなり遅いです。 MiniTestの方がはるかに高速であると聞いたことがあります。MiniTest/ Spec DSLは、RSpecでの作業に慣れている方法とかなり似ているので、試してみようと思いました。
ただし、Minitestのセットアップ方法と実行方法のウォークスルーを提供するものをWeb上で見つけることはできませんでした。 RSpecの本からテストする方法を学びましたが、Test :: UnitまたはMiniTestがどのように機能するはずなのかわかりません。 gemfileにgemがあり、いくつかの簡単なテストを作成しましたが、どこに配置するか、またはどのように実行するかわかりません。これは、誰も気にせずに書き留めておいたことが明らかなものの1つだと思います...
誰かがいくつかのMinitest/specファイルをセットアップして実行する方法を説明して、パフォーマンスをRspecと比較できますか?
[〜#〜]編集[〜#〜]
具体的には、これらは私が最も知っておくべき基本です:
rspec spec
またはrspec path/to/file_spec.rb
に相当するものがないようですが、何が欠けていますか?ありがとう!
この質問は minitestですべてのテストを実行する方法に似ていますか?
Ruby 1.9.3およびRake 0.9.2.2を使用すると、次のようなディレクトリレイアウトが与えられます。
Rakefile
lib/alpha.rb
spec/alpha_spec.rb
alpha_spec.rb
は次のようになります。
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
です
require 'rake'
require 'rake/testtask'
Rake::TestTask.new do |t|
t.pattern = 'spec/**/*_spec.rb'
end
あなたは走ることができます
rake test
Ruby -Ilib spec/alpha_spec.rb
ミニテストでspec_helper.rb
を使用するのが一般的であるかどうかはわかりません。ロードするための便利な方法はないようです。これを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 'minitest/spec'
require 'minitest/autorun'
require 'alpha'
そしてspec/alpha_spec.rb
は冗長な部分を次のものに置き換えます:
require 'spec_helper'
rake test
Ruby -Ilib -Ispec spec/alpha_spec.rb
ウォッチャーまたはスポークはテストを実行するための要件ではないことに注意してください。自動テストを行うのに便利です。しかし、MiniTestテストのセットを実行できる最も基本的な方法は、Ruby自体を使用することです。
$ Ruby myfileoftests.rb
Rubyのどのバージョンを使用していますか?
私の理解では、1.9はMiniTest
を導入しました。これはTest::Unit
を完全に置き換え、下位互換性のあるAPIを備えています。したがって、1.9を使用していて、RailsアプリがTest::Unit
を参照している場合、実際にはすでにMiniTest
を使用しています。
Ruby source-test/unit.rb
for 1.9.2には次の要件があります。
require 'minitest/unit'
require 'test/unit/assertions'
require 'test/unit/testcase'
また、test/unit/assertions
にはMiniTest::Assertions
が含まれます。
テストをより高速に実行することは、まったく別の暗い芸術です。 spork と watchr を見てください。前者は、アプリの初期化を維持し、変更されたファイルをリロードし、テストスイートを実行する前にフォークします。後者は、リポジトリ内のファイルの変更を監視し、関連するテストケースを自動的に実行します。
これらを組み合わせることで、かなり平均的なTDD設定が得られます。新しいモデルのテストケースを作成すると、自動的に実行され、失敗します。その後、関連するモデルを保存するたびに、そのテストケースが非常に迅速に再実行されます。赤/緑であるかどうかについて、ほぼ瞬時にフィードバックが得られます。
どちらも設定が簡単で、一緒にうまく動作するので少し難しいので、行き詰まっている場合は、さらにいくつかの質問で確認してください。
がんばって!
この 入門ビデオ で minitest-Rails を確認してください。 RailsアプリのMinitestを設定するプロセスについて説明します。
http://www.youtube.com/watch?v=xA2f2zBNvsc
このチュートリアルでは、ヘルパーファイルを作成する方法と、rakeタスクを使用してテストを実行する方法を示します。特定のテストを実行したい場合は、次のように実行できます。
Ruby -Itest test/models/user_test.rb
これが私のrakefile
全体です。これをトップディレクトリに配置します。
task :default => :test
task :test do
Dir.glob('./test/*_test.rb').each { |file| require file}
end
すべてのMinitestファイルを一度に実行するには、rake
と入力します。それでおしまい!
require 'minitest/autorun'
各ミニテストファイルの上部にあります。 Dir.globは間違いなくMinitestで動作します。
すべてのテストメソッドの名前を含むきれいな色のMinitest出力を取得するには、ファイルminitest_helper.rb
私の/ testディレクトリ。 (gem minitest-reportersをインストールする必要がありました):
require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'
require_relative './minitest_helper'
各テストファイルの上部にあります。
パトリックは本当に良い説明と例を書きました。今後の読者のために、グローバルな期待は現在減価されており、Minitest 6で削除されることに注意してください。expect
の呼び出しでテストしているものをラップする際に、ほとんど些細な変更が必要です。
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
expect(Alpha.new.greet('Alice')).must_equal('hello, Alice')
end
end