2016-09-15 75 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中的這種持久記錄?

編輯

我加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加載套件,它就會評估不在事務中的所有代碼。這就是爲什麼我不能通過查看創建記錄時試圖指出有問題的文件。

相關問題