2009-10-05 76 views
2

當我試圖在新的rails項目中運行規範或生成器時,我在subj中得到錯誤。未初始化的常量Test :: Unit :: TestResult :: TestResultFailureSupport

發生這種情況時,我會添加應用程序的組合。

我加在config/environment.rb文件如下:

config.gem 'rspec', :version => '1.2.6', :lib => false 
config.gem 'rspec-rails', :version => '1.2.6', :lib => false 
config.gem "thoughtbot-shoulda", :version => "2.10.2", :lib => 'shoulda', :source => "http://gems.github.com" 

我在OSX。

  • 紅寶石1.8.6(2008-08-11 PATCHLEVEL 287)
  • 寶石1.3.5
  • 導軌2.3.4
  • rspec的 - 1.2.6
  • 早該 - 2.10.2
  • 測試單位 - 2.0.3

我所知道的this並添加config.gem 'test-unit', :lib => 'test/unit'確實解決了genrat或問題,因爲它不會拋出異常,但它會在運行結束時打印0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications,所以我想它會嘗試運行出乎意料和不受歡迎的測試,同時規格也會停止運行,看起來像rspec沒有運行在運行rake spec時,我再次獲得測試單元輸出(由於只有規格,因此只有規格,沒有測試定義,因此只能進行0次測試)

+0

移除試驗單元寶石那樣的幫助,但我不能把這個解決方案:( – 2009-10-05 14:42:21

回答

1

我最近遇到了類似的問題,並追蹤到該犯的RubyGems:

http://github.com/vvs/rubygems/commit/cbb4b07d491dd49b8dff8ab7af706dde31307c7d

它加載「測試單元」的寶石,如果它的存在,或者默默地如果它不是移動的。這種變化的作者也許並沒有意識到一個基本的事實 - 激活寶石往往可以改變加載到系統中的其他寶石的行爲。應用程序開發人員應負責定義他們想要激活的一組寶石;紅寶石系統本身決定選擇加載寶石是一個令人頭疼的問題。

這個問題的另一半是測試單元gem干擾rspec的原因。我無法回答,但是我確實追蹤到沒有ExampleGroups被註冊的事實,這反過來是由於Rspec動態創建ActiveSupport的新子類時,ExampleGroupMethods中的「繼承」回調沒有被調用: :TestCase(這發生在ExampleGroupMethods#子類中)

+0

所以在思考這個問題的時候,我不清楚我是在談論同一個問題還是另一個問題,我說的問題只發生在我使用geminstaller時,它需要一部分rubygems('rubygems/validator'),然後試圖要求測試單元,但如果寶石是靜靜地移動無法使用。 這聽起來並不像你使用geminstaller,所以我不清楚它是測試單元中的rubygems。 – user341555 2010-05-14 20:55:52

+0

不確定,我也不會再遇到這個問題,但是無論如何要獎勵你的努力:) 我沒有足夠的耐心來追蹤這一切。 – 2010-05-15 15:21:46

+0

我認爲這是相關的......當我卸載測試單元時,這個問題就消失了。我沒有使用geminstaller。問題是我想運行一個ci服務器,其中一些項目使用測試單元,而另一些使用rspec,所以這特別令人沮喪:( – 2010-11-09 08:59:31

0

測試單元實際上內置於Ruby中,因此刪除了該Ruby後,在版本中。除非您需要的東西沒有包含在默認測試單元中,否則我不會擔心這一點。

+0

肯定的,但如果安裝的測試單元空有(它是依賴對於某些東西),把事情搞砸了,然後在某個地方出現了問題,現在我只是刪除了測試裝置的寶石,但我可能不得不再次將其重新裝回原來的位置 – 2009-10-07 13:12:23

+0

已經足夠了,在別人希望別人看到同樣的問題之前可以說明一點吧 – 2009-10-07 20:40:25

1

基於對話我發現here,看起來問題不在於RSpec與所有版本的測試單元一起死亡,只是它與新的版本不兼容。因此,完全卸載測試單元是一種解決方法。但是,如果這不適合你(因爲它不適合我),你可以安裝一箇舊版本(例如1.2.3),並且確保它在rspec之前加載。

例如,我在我的環境/測試中有這個。RB文件,並且測試再次運行。

config.gem 'test-unit' , :lib => 'test/unit', :version => '<2.0' 
config.gem "rspec",  :lib => false, :version => '<2.0' 
config.gem "rspec-rails", :lib => false, :version => '<2.0' 
相關問題