2012-08-28 4 views
12

私はRails 3.2でrspec(2.11.1)を使用しています。私が "rake spec"でテストスイートを走らせると失敗する。私が "rspec"でそれを動かすと、すべてが通ります。私はこの問題の他の言及を見てきましたが、何が起こっているのか、ベストプラクティスが何であるかを説明する決定的なものはありません。"rake spec"または "rspec"( "rake spec"を動作させることはできません)を使用する必要がありますか?

"rake spec"または "rake tmp:clear & & rake spec"を実行すると、テストに失敗します。

"rspec"または "rspec spec"または "rake db:test:prepare & & rspec"の場合、私のテストに合格します。 「:テスト:デシベルの準備」を

は、私が唯一の違いは、レーキがやったことだと思ったが、私はRSpecの実行前に手動で行う場合は私のテストはとてもそれが物語のすべてをすることはできません渡します。

読書のビットを行った後、私は私のGemfileを変更しました。以前は、 "RSpec Book"(p328)のようにrspec gemを "group:development、:test"ブロックに入れて記述していました。私は ":development"を削除してバンドルをしました。現在、「rake spec」は何もしません。 "rspec"は以前と同じように動作します。

非常に混乱して...

+3

もう少し調べました。 Gemfileはrspecの本(開発、テスト)で実行されます。rspecは「テスト」環境を使用し、rake仕様は「開発」環境を使用します。確かにこれがなぜであるかわからないが、探し続けるだろう... – starfry

+3

"RAILS_ENV = 'test' rake spec"が動作する。私はテスト環境にテストを設定する必要はありませんでした。具体的にする必要はありません... – starfry

+0

私の回答はhttp://stackoverflow.com/questions/15701298/rspecの複製として削除されました(@ bhargav-raoの礼儀)。 -spec-レーキ-specは-与え-異なる結果/ 41877864#41877864 –

答えて

9

RAILS_ENV=test rake spec

+0

私の知る限り、これはすくいspec'はデシベル '呼ぶ'以来、良くないです:スキーマ:いくつかの時点でload'、あなたがこの方法で環境を設定した場合、それをスキーマを 'test'から' test'にロードしようとしますか? – Ali

3

を実行してみてくださいここで私のためにそれを修正するものです。 私も、私はテストと開発のためのブロックを作り、開発状態の前にそれをを入れ、これに私はそれを変更し、この

group :developmet do 
    gem 'rspec-rails','2.9.0' 
... 
end 
group :test do 
    gem 'rspec-rails','2.9.0' 
... 
end 

ように私のGemfileを持っていたrake spec RAILS_ENV=test を実行することができました。私はまた、私のdbの移行がすべてそれをテストのデータベースにしたことを確認しました。 db:migrate RAILS_ENV=test

group :development,:test do 
    gem 'rspec-rails','2.9.0' 
     ... 
end 
group :development do 
    ... 
end 
+2

hmm ...元々のGemfileの "development"のスペルミスを除いて、機能的には同じですか?それはrspecがロードされないようにします(静かに失敗します)。 – Rob

3

RSpecのレールのgithubのによると、Gemfileの開発とテストグループにRSpecのレールの宝石を置きます。テストレイクタスクは、テスト環境に切り替える前に開発環境を最初にロードするためです。

group :development, :test do 
    gem 'rspec-rails' 
end 

また、Gemfileを使用している場合は、「bundle exec rake spec」を使用してすべての仕様を実行してください。シングルスペックファイルを実行するには、 "bundle exec rake rspec path/to/spec_file"を使用します。 "bundle exec"を使用すると、システムrakeコマンドの代わりにGemfile経由でインストールされた正しいrakeコマンドを使用していることが保証されます。

参考:https://github.com/rails/rails/issues/8591

関連する問題