2016-09-15 9 views
0

テストスイートに問題があります。RSpecレコードが一見前に作成されました(:suite)このレコードをどのように追跡しますか?

スイート全体が起動するたびに、迷子記録が作成されます。

単一のファイルまたはスペックのコンテキストを実行するたびに、この迷子レコードは作成されません。

spec_helper.rbにconfig.before(:each) { puts "COUNT = #{Model.count}\n" }と書きましたが、テストの実行順序に関わらず、このレコードは何とかしてそのまま残ります。例が始まる前の様子です。

データベースをシードするので、クリーンセットアップを試みました。私はすべてのテストを実行するたびに

RAILS_ENV=test rake db:setup 
RAILS_ENV=test rake db:seed 
echo "Model.count" | rails c test 
=> 0 

は、次に(順序をチェックしbefore(:all)をチェック)。

rspec 
COUNT = 1 
. 
COUNT = 1 
. 
COUNT = 1 
. 
etc 

私は細心の注意を払ってspec_helper.rb(RSpec2、事前rails_helper.rb)を検討し、運を持つすべてのサポートファイルをコメントアウトしました。

私はこの時点でコードベースを疑っています。誰かがfind_or_createの奇妙なコールバックか何かの後ろに残した何かを奇妙に呼び出すかもしれませんが、私は分かりません。私が知りたいのですがどのような

は次のとおりです。

  • 私はスイートのスタートアップを破壊対処方法を教えてください。
  • テストスイートのバックトレースを開始するだけですか?
  • 誰でもRSpecのこの種の永続レコードを追い抜くことに成功しましたか?

EDIT

私はconfig.before(:suite) { debugger }を追加し、レコードがまだこれの前に作成されます!

このコードをさらに細分化するにはどうすればよいですか?私は永続的な記録見つかったかの記録のために

[23, 32] in /Users/yourname/.rvm/gems/[email protected]/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb 
    23   @world.announce_filters 
    24 
    25   @configuration.reporter.report(@world.example_count, @configuration.randomize? ? @configuration.seed : nil) do |reporter| 
    26   begin 
    27    @configuration.run_hook(:before, :suite) 
=> 28    @world.example_groups.ordered.map {|g| g.run(reporter)}.all? ? 0 : @configuration.failure_exit_code 
    29   ensure 
    30    @configuration.run_hook(:after, :suite) 
    31   end 
    32   end 
(rdb:1) ModelName.count 
1 

答えて

2

before(:suite) { debugger }を使用することにより

を、私はレコードを削除し、全体のテストスイートを実行し、テストが失敗していた気づきます。このテストの中で

は、次のようなものでした:

context "blah" do 
    model = FactoryGirl.create(:model) 
end 

私は単にbefore(:each)ブロック内のコードを入れて、テストが合格され、今では私のものでした。

TIL:RSpecがスイートをロードするたびに、トランザクション内にないすべてのコードが評価されます。だから私はレコードが作成されているときを見て問題のあるファイルを指摘しようとすることができませんでした。

関連する問題