RSpecで単一のtest / specファイルをどのように実行しますか?


282

たとえば、編集中の1つのファイルに対して、1つのスペックファイルのテストを実行できるようにしたいと考えています。 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

回答:


392

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

rspec path/to/spec/file.rb

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

古いバージョンのrspecを使用している場合:

spec path/to/spec/file.rb

31
新しいrspecでは、「rspec path / to / file.rb」を使用する必要があります
djburdick

3
たぶん私はそれを間違っているのですが、 "bundle exec rspec path / to / spec / file.rb"
andrhamm

2
Railsを使用している場合は、空のデータベースから開始するために、Rakeを使用して仕様を実行することをお勧めします。
2013年

@andrhamm、バンドルのコンテキストで仕様を実行しているだけです。これは、gemsets(デフォルトではrvmに付属し、rbenvの個別の拡張機能)を使用していない場合に必要です
Caleb

6
テストを1つだけ実行する場合は、テストの開始の行番号をファイルに追加します。例:rspec path / to / spec / file.rb:455
runamok

201

生の呼び出し:

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

これをエディターに埋め込む方法を理解してください。


1
言ったように、私はレールにいないのでコントローラーはありません。しかし、「rake spec SPEC = file.rb」は機能します。ありがとう!現在、Emacsの統合に取り組んでいます。
ジョナサントラン

5
回避できる場合は、rakefileを起動しないでください。それは実に年齢がかかる
オリオン・エドワーズ

2
受け入れられた回答を変更しましたが、SPEC_OPTSパラメータも役に立ちました。
ジョナサン・トラン

2
これが私が良い答えと呼んでいるものです。なぜ「回答」とマークされていないのですか?
gmile

1
多くの場合、specを直接実行するのが最良の選択ですが、カスタムRakefileでさまざまなマジックビットに対してrakeを実行する必要がある場合があります
Nerdmaster

124

この質問は古いものですが、単一のテストを実行する方法を検索すると、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までの任意の数になります。

お役に立てれば!


これは興味深いですが、仕様を複数のファイルにリファクタリングすると機能しないように見えます(つまり、メインの_spec.rbファイルでのみ使用できますが、例がどれも含まれていない場合、何も実行されません) 。また、トップレベルのスペックファイルではないファイルに使用しようとしても、何も実行されません。)
Trejkaz

ついていません。「トップレベルのスペックファイル」とはどういう意味ですか?私のテストスイートはほとんど常にいくつかのファイルに分割されており、この方法を使用して単一のファイルでテストを呼び出すことができます。require他のスペックファイルであるファイルがあるということですか?
juanpaco 2013年

これは、spec /ディレクトリの下の任意のレベルの任意のファイルで使用できます。トレイカズは間違っていると思います。
Michael Durrant

7
これはすごいですし、トップになるはずです!
Tommaso Barbugli 2014

4
私はいつもこれを使用していますが、1つのファイルから複数のテストを実行したい場合もあります。:そして、あなたはこのようなすべての例を入力することができますrspec spec/models/foo_spec.rb:2:12:49
swilgosz

61

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

したがって:

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'

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


@bandhuntで述べたように、 "spec"を "rspec"に置き換える必要があることを除いて、これで十分です
Nicolas Wormser

19

ヘルプから(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


3
新しいRspecバージョンでは:、ドキュメントごとのコロンと一般的な回答の後に行番号を追加します。
dragon788

13

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

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

例えば:

ruby myclass_spec.rb

2
このようなファイル内で1つのテストを実行することは可能ですか?
Ian Vaughan

12

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

宝石は維持されていないようです、最後のコミットは5年前です!
thegreendroid 2018

10

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 実行するファイルです。

そのファイル内でいくつかの追加オプションを使用して1つのテストを実行できますか?
Ian Vaughan

10

すべてのrspecファイルを実行するには:rspec

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

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

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

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

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


5

これらの例を機能させるのに問題がありました。おそらく投稿が古く、コマンドが変更されたためでしょうか?

少し調べた後、私はこの作品を見つけました:

rspec spec / models / user_spec.rb

これは単一のファイルのみを実行し、ターミナルで有用な出力を提供します。


これは、承認された回答のコメントで言及されました。はい、この投稿は非常に古く、コマンド名が変更されたと思います。
ジョナサントラン

4

specky.vim


3

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

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

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


3

この質問には多くのすばらしい回答が書かれていますが、Rspectagsアプローチを使用しているものはありません。

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

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

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

それから私は走ります

bundle exec rspec . --tag dev:current

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


2

たとえば、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

理解を深めていただければ幸いです。

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