2014-01-23 91 views
1

有沒有人見過這個問題?有時,我的Rails運行規範3.2.14時RSpec的項目似乎完成像往常一樣:Rspec在完成運行後通過我的測試掛起

Finished in 1.27 seconds 
6 examples, 2 failures 

Failed examples: 

rspec ./spec/models/my_spec.rb:123 # Hello world 1 
rspec ./spec/models/my_spec.rb:234 # Hello world 2 

但當時它只是掛在那兒,不會讓我繼續在殼工作。我可以從另一個終端選項卡中終止進程,或者只是啓動一個新shell並在那裏再次運行測試,但這會使測試驅動開發變得非常痛苦。

當我重新啓動計算機時,問題會消失一段時間,但最終總會再次發生。掛起一次後,即使我在不​​同的項目中運行不同的測試,每次運行rspec時都會掛起。每次在同一個項目中進行的相同測試對我的同事們的計算機都很好。

我不確定什麼信息可以幫助回答這個問題,所以讓我知道是否有什麼我應該添加到這篇文章。我正在運行ruby 2.0.0p195和rails 3.2.14。我有Mac OS 10.7.5。我使用zsh和rbenv。

感謝您的閱讀!

+0

這可能沒有幫助,但有時是。下次發生。找出該進程的pid並嘗試運行lsof -p 。也許你會看到一個文件或一個端口打開或者出於某種原因掛着的東西。 – rainkinz

+0

感謝rainkinz,很高興知道,這有助於確定問題的根源! – lucas

+0

太棒了。這真是太神奇了。所以在你的回答中你說SimpleCov是個問題。 lsof的輸出結果是什麼幫助你認識到如果你不介意我問的問題? – rainkinz

回答

0

好的,在朋友的幫助下計算出來。它只需從我的spec_helper中刪除SimpleCov。不知道爲什麼SimpleCov是造成這個問題,但我會發現一個更新,如果我發現。

0

我有同樣的問題,並通過添加以下到我的spec_helper.rb解決了這個問題:

SimpleCov.start do 
    use_merging false 
end 

請注意,我在虛擬盒虛擬機具有同步的目錄下運行。

這是我發現的,爲什麼這個作品的解釋:

「當simplecov存在,默認情況下它會嘗試合併與磁盤上有什麼記錄覆蓋。爲了避免腐敗,它使用一個鎖文件來守護這合併。因爲我的虛擬盒子共享fs實際上並不符合posix,所以鎖定文件永遠不會獲取,並永遠在這裏永遠阻止。

因爲我不關心合併覆蓋率結果,所以我的解決方案是簡單地禁用此行爲與use_merging標誌。「

https://gist.github.com/k-yamada/3930916