web-dev-qa-db-ja.com

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

Railsテストスイートから単一のテストを実行するにはどうすればよいですか?

rake test ANYTHINGは役に立たないようです。

112
artemave

注:これは、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
140
Darryl

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

rake test TEST=tests/functional/accounts_test.rb

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

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

(@ Puhlzeのコメントより)

80
laffuste

Rails 5:

Rails test test/models/my_model.rb
35
James

@Jamesのおかげで、答えは次のようになります。

Rails test test/models/my_model.rb:22

22が特定のテストの行番号であると仮定します。 Rails help:

 $ Rails test --help

ファイル名に行番号を追加することにより、単一のテストを実行できます。

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

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

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.
25

In Rails 5

この方法で単一のテストファイルを実行しました(すべてのテストを1つのファイルに)

Rails test -n /TopicsControllerTest/ -v

こちらをご覧ください https://stackoverflow.com/a/41183694/3626659

9
Alupotha

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

bundle exec Ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb
5
Brian Rose

それは私の愚かな真夜中の質問でした。 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"
3
artemave

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

Ruby actionmailer/test/mail_layout_test.rb

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

1
Aupajo

私の状況では、rakeのみが機能しますTESTOPTS="-n='/sample/'"

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

最良の方法は、ガイドを直接調べることです: http://guides.rubyonrails.org/contributing_to_Ruby_on_Rails.html#running-tests

cd actionmailer
bundle exec Ruby -w -Itest test/mail_layout_test.rb -n test_explicit_class_layout
1
Diego Plentz

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

~/Projects/Rails/actionview (master)$ Ruby -I test test/template/number_helper_test.rb 
0
Diego Plentz