Railsテストスイートから単一のテストを実行する方法は?


回答:


158

注: これはを介してテストを実行しませんrake。だからあなたが持っているコードはRakefile実行されません。

単一のテストを実行するには、railsプロジェクトのメインディレクトリから次のコマンドを使用します。

ruby -I test test/unit/my_model_test.rb -n test_name

これは、指定されたファイルのMyModelTestクラスで定義された「name」という名前の単一のテストを実行します。test_nameは、テスト名を取得し、「test」という単語を前に付けて、単語をアンダースコアで区切ることによって形成されます。例えば:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

次の方法で両方のテストを実行できます。

ruby -I test test/unit/my_model_test.rb

そしてちょうど2回目のテスト

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
これは機能しません(機能テストまたは単体テスト)。わかります0 tests, 0 assertions, 0 failures, 0 errors。Rails 3.0.7。
Bセブン

10
私は個人的に正規表現形式のファンです-n "/good/"。シェルのエスケープは常に楽しいので、単純な正規表現を使用する傾向がありますが、完全なテスト名を常に書き出すよりもはるかに簡単です。
Groxx

4
これが機能するためには、応答で指定されたMAINディレクトリではなく、test/フォルダを含むサブディレクトリにいる必要があることに注意することが重要です。たとえば、テストactivesupport/test/core_ext/array_ext_test.rbを実行したい場合は、activesupport/最初にする必要があります。
Vincent B.

3
@Groxx-最後に解決策!ありがとうございました!-n "/good/"働いた。
Bセブン

2018年以降は、注意して実行してください。これは、ローカルデータをフィクスチャデータと交換し、再び復元するなど、多くの目的で使用されるレールに組み込まれたいくつかのテストタスク(db:test:prepareなど)をバイパスします。これを実行すると、私のローカルデータベースが破壊されました。stackoverflow.com/a/47006811/1154642(私にとってはうまくいった)のような組み込みのレールテストタスクを使用するソリューションを考えてみましょう。
ブライアンブラウン

99

テストファイルを実行します

rake test TEST=tests/functional/accounts_test.rb

テストファイルで単一のテストを実行します。

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(@Puhlzeのコメントから。)


10
また、特定のファイルで単一のテストを実行する場合は、テストに渡されるTESTOPTS環境変数を追加できます。EGレーキテストTEST = tests / functional / accounts_test.rb TESTOPTS = "-n / paid accounts /"
Puhlze

1
後者のテストコマンドが機能しない場合は、試してくださいrake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"/paid accounts/単一引用符で囲む)
rrw


38

レール5の場合:

rails test test/models/my_model.rb

9
しかし、これはファイル内のすべてのテストケースを実行し、質問は単一のテストを実行するように求めます...
user000001

あなたは、ファイル名に行番号を付加することによって、単一のテストを実行することができますbin/rails test test/models/user_test.rb:27
とSegfault

29

@ジェームズのおかげで、答えは次のようです:

rails test test/models/my_model.rb:22

22が指定されたテストの行番号であると仮定します。レールのヘルプによると:

 $ rails test --help

ファイル名に行番号を追加して、単一のテストを実行できます。

    bin/rails test test/models/user_test.rb:27

また、これが機能するためには、テストがActionDispatch :: IntegrationTestを継承する必要があることに注意してください(これが私の間違いでした)。

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
これは、少なくとも特定の行をテストするために、Railsガイドに基づく最良の答えのようです。
tfantina 2017年


5

実際のRailsスイートで単一のテストを実行するには:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb

3

それは私の愚かな真夜中の質問でした。Railsは実行中のコマンドを親切に出力しますrake test。残りはカットアンドペーストの練習です。

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"


2

単一のテストを実行したい場合は、通常のRubyスクリプトとして実行できます

ruby actionmailer/test/mail_layout_test.rb

cdディレクトリに移動し、そのrake test中で実行することで、スイート全体(ActiveRecordやActionMailerなど)を実行することもできます。


1
Railsにはありません-少なくともデフォルトのテストファイルが生成されていません。最初の行に「require 'test_helper'」が含まれていますが、ロードパスが時間内にセットアップされていません。最初のすべての行を明示的なrequire( "require File.join(File.dirname(FILE)、 '..'、 'test_helper')")に変更すると、ソリューションが機能します。
James A. Rosen、

ahem、that'srequire File.join(File.dirname(__FILE__), '..', 'test_helper')
ジェームズA.ローゼン

@Gaiusダブルチェック。最初のものは機能しませんが、cd-ing inは機能します。明確にするために(これを誤って読んでいるかどうかはわかりませんが、「生成されたテストファイル」と言っていました)、これはRailsプロジェクト自体ではなく、Rails ライブラリ自体に対するものです。
Aupajo

2

rake作品のみの私の状況ではTESTOPTS="-n='/sample/'"

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

最初に、テストするlibのフォルダーにアクセスし(これは重要です)、次に実行します。

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

Railsフォルダー

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

適切なフォルダーをロードする必要があることに注意してください: "activerecord / test"(テストがある場合)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.