次のファイルがあります。
/spec/controllers/groups_controller_spec.rb
そのスペックだけを実行するためにterminalでどのコマンドを使用し、どのディレクトリでコマンドを実行しますか?
私の宝石ファイル:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-Rails", "~> 2.4"
gem "cucumber-Rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_Rails'
gem 'email_spec'
end
スペックファイル:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
どれぐらいの間これが利用可能になったのかわからないが、実行フィルタリングのためのRspec設定がある - それで今これをあなたのspec_helper.rb
に追加することができる:
RSpec.configure do |config|
config.filter_run_when_matching :focus
end
そして、it
、context
またはdescribe
にフォーカスタグを追加して、そのブロックのみを実行します。
it 'runs a test', :focus do
...test code
end
RSpecのドキュメント:
通常私はします:
rspec ./spec/controllers/groups_controller_spec.rb:42
42
は実行したいテストの行を表します。
編集1:
タグを使うこともできます。 ここ を参照してください。
編集2:
試してください:
bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42
熊手で:
rake spec SPEC=path/to/spec.rb
(クレジットは この回答 になります。彼に投票してください。)
EDIT(@cirosantilliのおかげで):仕様内で特定のシナリオを1つ実行するには、説明と一致する正規表現パターン一致を提供する必要があります。
rake spec SPEC=path/to/spec.rb \
SPEC_OPTS="-e \"should be successful and return 3 items\""
Specコマンドに正規表現を渡すと、指定した名前に一致するit
ブロックのみが実行されます。
spec path/to/my_spec.rb -e "should be the correct answer"
多くの選択肢があります。
rspec spec # All specs
rspec spec/models # All specs in the models directory
rspec spec/models/a_model_spec.rb # All specs in the some_model model spec
rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line 'nn'
rspec -e"text from a test" # Runs specs that match the text
rspec spec --tag focus # Runs specs that have :focus => true
rspec spec --tag focus:special # Run specs that have :focus => special
rspec spec --tag focus ~skip # Run tests except those with :focus => true
特定のテストを実行するための私の好ましい方法は少し異なります - 私は行を追加しました
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
私のspec_helperファイルに。
特定のテスト(またはコンテキスト、仕様)を実行したいときはいつでも、タグに "focus"タグを追加して通常通りにテストを実行できます。フォーカスされたテストのみが実行されます。すべてのフォーカスタグを削除すると、run_all_when_everything_filtered
が起動し、すべてのテストが通常どおり実行されます。
コマンドラインオプションほど速くて簡単というわけではありません - 実行したいテスト用にファイルを編集する必要があります。しかし、それはあなたにより多くのコントロールを与えます、と私は感じます。
@apneadiving答えはこれを解決するためのきちんとした方法です。しかし、現在はRspec 3.3に新しいメソッドがあります。行番号を使わずにrspec spec/unit/baseball_spec.rb[#context:#it]
を実行するだけです。から取られた ここ:
RSpec 3.3は例を識別する新しい方法を導入します[...]
たとえば、次のコマンドは
$ rspec spec/unit/baseball_spec.rb[1:2,1:4]
…は、spec/unit/baseball_spec.rbで定義されている最初の最上位グループの下に定義されている2番目と4番目の例またはグループを実行します。
そのため、rspec spec/unit/baseball_spec.rb:42
(42行目のテスト)が最初のテストになる代わりに、テストケースがどのようにネストされているかに応じて、単にrspec spec/unit/baseball_spec.rb[1:1]
またはrspec spec/unit/baseball_spec.rb[1:1:1]
を実行できます。
私はこの方法で単一のテストファイル(すべてのテストを1つのファイルにまとめて)を実行しました。
Rails test -n /TopicsControllerTest/ -v
クラス名を使用して目的のファイルに一致させることができますTopicsControllerTest
私のクラスclass TopicsControllerTest < ActionDispatch::IntegrationTest
出力:
必要に応じて、単一のテストメソッド\TopicsControllerTest#test_Should_delete\
に合わせて正規表現を微調整できます。
Rails test -n /TopicsControllerTest#test_Should_delete/ -v
モデルの場合、行番号5でのみケースが実行されます
bundle exec rspec spec/models/user_spec.rb:5
コントローラーの場合:行番号5でのみケースが実行されます
bundle exec rspec spec/controllers/users_controller_spec.rb:5
信号モデルまたはコントローラの場合、上から行番号を削除
すべてのモデルでケースを実行する
bundle exec rspec spec/models
すべてのコントローラーでケースを実行する
bundle exec rspec spec/controllers
すべてのケースを実行する
bundle exec rspec
rspec 2以降では、次のものを使用できます。
# in spec/spec_helper.rb
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
# in spec/any_spec.rb
describe "something" do
it "does something", :focus => true do
# ....
end
end
私は自分のテストを自動実行するためにこのguard gemを使います。テストファイルの作成または更新操作後にテストを実行します。
https://github.com/guard/guard-test
または通常は、次のコマンドを使用して実行できます。
rspec spec/controllers/groups_controller_spec.rb
あなたはこのようなことをすることができます:
rspec/spec/features/controller/spec_file_name.rb
rspec/spec/features/controller_name.rb #run all the specs in this controller
Rails 3プロジェクトでrspec 2を使用している場合、Railsのルートディレクトリから。
bundle exec rspec spec/controllers/groups_controller_spec.rb
間違いなく動作するはずです。それを入力するのに飽きたので、 'bundle exec rspec'を 'bersp'に短縮するエイリアスを作成しました。
'bundle exec'は、あなたのgemファイルで指定された正確なgem環境をロードするようになっています。 http://gembundler.com/
Rspec2は 'spec'コマンドから 'rspec'コマンドに切り替えました。