47

私はかなり初心者のテスターですが、RailsのTDDをより良くしようとしています。

RSpecはうまく機能しますが、私のテストはかなり遅いです。MiniTestの方がはるかに高速で、MiniTest / Spec DSLはRSpecでの作業に慣れている方法と非常によく似ていると聞いたので、試してみようと思いました。

ただし、Minitestをセットアップして実行する方法のウォークスルーを提供するものをWeb上で見つけることができませんでした。RSpecの本からテストの方法を学びましたが、Test::UnitまたはMiniTestがどのように機能するのかわかりません。gemfileにgemがあり、いくつかの簡単なテストを作成しましたが、それらをどこに配置するか、またはどのように実行するかがわかりません。これは、誰もわざわざ書き留めていないことは明らかです...

いくつかのMinitest/specファイルをセットアップして実行し、パフォーマンスをRspecと比較する方法を誰かに説明してもらえますか?

編集

具体的には、これらは私が最も知る必要がある基本です:

  1. test_helperファイル(spec_helperなど)が必要ですか?必要な場合は、どのように作成しますか?
  2. ミニテストはどのように実行しますか?rspec specまたはに相当するものがないようですがrspec path/to/file_spec.rb、何が欠けていますか?

ありがとう!

4

7 に答える 7

40

この質問は、ミニテストですべてのテストを実行する方法に似ていますか?

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
  • 1 つのテスト: ruby -Ilib spec/alpha_spec.rb

spec_helper.rbminitestを使用するのが一般的かどうかはわかりません。ロードするための便利な方法はないようです。これを 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
  • 1 つのテスト: ruby -Ilib -Ispec spec/alpha_spec.rb
于 2011-12-06T03:59:02.760 に答える
5

watchr または spork は、テストを実行するための要件ではないことに注意してください。それらは自動テストを行うのに便利です。しかし、一連の MiniTest テストを実行する最も基本的な方法は、ruby 自体を使用することです。

$ ruby myfileoftests.rb
于 2011-10-07T04:45:17.493 に答える
4

どのバージョンの Ruby を使用していますか?

私の理解では、1.9 で が導入され、後方互換性のある API に完全にMiniTest置き換えられました。Test::Unitしたがって、1.9 を使用していて、Rails アプリが を参照Test::Unitしている場合、実際には既に を使用していMiniTestます。

Ruby ソースを見てみましょう - test/unit.rb1.9.2 の場合、次の要件があります。

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

test/unit/assertions含まれていMiniTest::Assertionsます。


テストをより高速に実行することは、まったく別の暗い芸術です。sporkwatchrを見てください。前者は、アプリの初期化を維持し、変更されたファイルをリロードし、テスト スイートを実行する前にフォークします。後者は、リポジトリ内のファイルの変更を監視し、関連するテスト ケースを自動的に実行します。

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

どちらもセットアップしてうまく動作させるのは少し難しいので、行き詰まった場合はもう一度質問してください。

頑張ってください!

于 2011-08-28T22:39:51.290 に答える
3

minitest-railsのこの入門ビデオをチェックしてください。RailsアプリのMinitestを設定するプロセスを順を追って説明します。

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

ウォークスルーでは、ヘルパーファイルを作成する方法と、rakeタスクを使用してテストを実行する方法を示します。特定のテストを実行する場合は、次の方法で実行できます。

ruby -Itest test/models/user_test.rb
于 2012-07-27T16:34:43.600 に答える
1

rakefileこれが私のトップディレクトリに置いた私の全体です:

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

すべての Minitest ファイルを一度に実行するには、次のように入力しrakeます。それでおしまい!

require 'minitest/autorun'各 Minitest ファイルの先頭にあることを確認してください。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'各テストファイルの先頭に置く必要がありました。

于 2014-05-14T01:11:10.087 に答える
1

RSpec の新しいバージョン (2012 年 1 月にリリースされた 2.8 以降) では、速度が大幅に向上しています。 ここでは、パフォーマンスの違いを調査し、MiniTest と比較します。

また、 Ryan Bates によるこのスクリーンキャストは、MiniTest の優れた紹介であることがわかりました。これはプロ向けビデオの 1 つであり、視聴するにはサブスクライブする必要があることに注意してください。

于 2012-05-20T18:14:33.890 に答える