web-dev-qa-db-ja.com

RSpecで単一のテスト/仕様ファイルを実行するにはどうすればよいですか?

たとえば、編集中の1つのファイルに対して、単一のspecファイルのテストを実行できるようにします。 rake specはすべての仕様を実行します。私のプロジェクトはRailsプロジェクトではないため、rake spec:docは機能しません。

これが重要かどうかわかりませんが、ここに私のディレクトリ構造があります。

 ./ Rakefile 
 ./ lib 
 ./ lib/cushion.rb 
 ./ lib/cushion 
 ./ lib/cushion/doc .rb 
 ./ lib/cushion/db.rb 
 ./ spec 
 ./ spec/spec.opts 
 ./ spec/spec_helper.rb 
 ./ spec/db_spec.rb 
262
Jonathan Tran

または、rakeをスキップして、「rspec」コマンドを使用できます。

rspec path/to/spec/file.rb

あなたの場合、。/ spec/db_spec.rbファイルに適切なヘルパーが含まれている限り、問題なく動作するはずです。

古いバージョンのrspecを使用している場合は、次のとおりです。

spec path/to/spec/file.rb
365
Cameron Booth

生の呼び出し:

 rake spec SPEC = spec/controllers/sessions_controller_spec.rb\
 SPEC_OPTS = "-e \" cookieでログインする必要があります "" 

これをエディターに組み込む方法を見つけてください。

199
mislav

この質問は古いものですが、1つのテストの実行方法を検索するときにGoogleの上部に表示されます。それが最近の追加かどうかはわかりませんが、仕様から単一のテストを実行するには、次のことができます:

rspec path/to/spec:<line number>

-line number-は、テストの一部を含む行番号です。たとえば、次のような仕様がある場合:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Spec/models/foo_spec.rbに保存されているとしましょう。次に、実行します:

rspec spec/models/foo_spec.rb:2

そして、その1つの仕様を実行するだけです。実際、その数は2〜5のいずれかです。

お役に立てれば!

116
juanpaco

-eで* e * xampleテストケースの実際のテキストを使用することもできます!

だから:

it "shows the plane arrival time"

使用できます

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

ここでは熊手は必要ありません。

58
tcurdt

ヘルプから(spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

例:spec spec/runner_spec.rb -l 162

18
boblin

Rspecをgemではなくプラグインとしてインストールした場合、spec実行可能ファイルはありません。

とにかく、Rubyを使用してファイルを実行するだけです。 rspecコードは、テストを実行するのに十分賢いです。

例えば:

Ruby myclass_spec.rb
13
Orion Edwards

http://github.com/grosser/single_test のようなことができます。

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last
12
Zeke

Ruby 1.9.2およびRails 3には、1つのスペックファイルを実行する簡単な方法があります。

 Ruby -I spec spec/models/user_spec.rb 

説明:

  • Rubyコマンドは、rakeコマンドよりも高速になる傾向があります
  • -I specは、「ファイルを探すときに「spec」ディレクトリを含める」ことを意味します
  • spec/models/user_spec.rbは実行したいファイルです。
10

Rspecファイルのallを実行するには:rspec

注:プロジェクトのルートにいる必要があります

one rspecファイルを実行するには:rspec 'path_to/spec.rb'

注:「path_to/spec.rb」をパスに置き換えます。引用符はオプションです

1つのファイルからone rspec testを実行するには:rspec 'path_to/spec.rb:7'

注::7は、テストを開始する行番号です

8
nflauria

投稿が古く、コマンドが変更されたためか、これらの例のいずれかを動作させるのに問題がありましたか?

いろいろ調べてみたところ、この作品が見つかりました。

rspec spec/models/user_spec.rb

これにより、単一のファイルのみが実行され、ターミナルで有用な出力が提供されます。

5
Greg Hemphill

specky.vim

4
fred

または、自動テストをご覧ください。

コマンドウィンドウで自動テストを実行すると、スペックファイルを保存するたびに実行されます。また、指定しているファイルが実行されるたびに実行されます。

たとえば、person_spec.rbと呼ばれるモデル仕様ファイルと、person.rbと呼ばれるモデル仕様ファイルがある場合、これらのファイルのいずれかをエディターから保存するたびに、仕様ファイルが実行されます。

3
fatgeekuk

この質問に対する多くの素晴らしい答えが書かれましたが、それらのどれも Rspec tags アプローチを使用していません。

タグを使用して、さまざまなファイルで1つ以上の仕様を実行します。現在の開発タスクに関連する仕様のみです。

たとえば、値「current」でタグ「dev」を追加します。

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

それから私は走る

bundle exec rspec . --tag dev:current

個別の仕様またはグループに異なるタグ/値を設定できます。

2
Victor BV

たとえば、todoを作成するためのテストを実行しているとします。以下のようにcrete_spec.rbファイルを使用して、その特定のtodo仕様コードをいつでも実行できます。

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

すべての仕様を1つのショートで実行する場合。

   rspec 

特定のコントローラーユーザーですべての仕様を実行する場合は、これ。

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

それがあなたにもっと理解を与えることを願っています!

2
Prabhakar