2008-10-01 61 views
25

我在我們的rails應用程序中有一個測試掛起找不到哪一個(因爲它掛起,並沒有得到失敗報告)。我發現這個博客文章http://bmorearty.wordpress.com/2008/06/18/find-tests-more-easily-in-your-testlog/,它添加了一個設置鉤子來打印測試名稱,但是當我嘗試做同樣的事情時,它給了我一個錯誤,指出設置參數的錯誤數量(1代表0)。任何幫助都將不勝感激。Rails測試懸掛 - 如何在執行前打印測試名稱?

回答

38

如果您在使用耙運行測試,將工作:

rake test:units TESTOPTS="-v" 
0

你使用什麼測試框架?測試/股?

我會看看RSpec,它會爲您的測試提供更多的上下文。您還可以得到一個不錯的HTML報告,看起來像這樣:

RSpec Result http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg

假如你有任何失敗的測試,具體的測試將是紅色的,它會擴展到特定的線路,其中測試未能提供您更多關於測試失敗的原因以及您應該考慮解決問題的位置。

+2

測試懸掛,而不是失敗,所以這個答案是不相關的。 – 2008-10-02 05:27:20

3

博客文章中的定義應該是特定的(設置(&塊)方法在context.rb中的Thoughtbot :: Shoulda模塊中定義,然後應該由TestCase擴展該模塊)。

純測試::單位的定義是

# File test/unit/testcase.rb, line 100 
     def setup 
     end 

你可以做的是

def setup 
    log_test 
end 

private 

def log_test 
    if Rails::logger 
    # When I run tests in rake or autotest I see the same log message multiple times per test for some reason. 
    # This guard prevents that. 
    unless @already_logged_this_test 
    Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n" 
    end 
    @already_logged_this_test = true 
end 

編輯

,如果你真的不想編輯您的文件可能會導致重新打開測試用例並延長運行時間:

class Test::Unit::TestCase 
    alias :old_run :run 
    def run 
    log_test 
    old_run 
    end 
end 

這應該工作(我沒有紅寶石各地雖然測試)


我放棄了! (沮喪)

我檢查了代碼和軌道實際上背後的場景魔術可能是爲什麼重新定義運行不起作用。

事情是:魔術的一部分包括ActiveSupport :: CallBack和創建回調安裝和拆卸。

這意味着

class Test::Unit::TestCase 
    setup :log_test 

    private 

    def log_test 
    if Rails::logger 
     # When I run tests in rake or autotest I see the same log message multiple times per test for some reason. 
     # This guard prevents that. 
     unless @already_logged_this_test 
     Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n" 
     end 
     @already_logged_this_test = true 
    end 
    end 
end 

一定要努力

,實際上它運行測試確實工作。我感到困惑的是,這是我嘗試的第一件事,並且因爲出現同樣的錯誤而失敗

+0

努力的一枚硬幣。 – nurettin 2012-02-15 14:55:07

6

測試名稱的打印由TestRunner負責。如果您從命令行運行測試,則可以指定-v選項以打印出測試用例名稱。

例如:

ruby test_Foo.rb -v 
Loaded suite test_Foo 
Started 
test_blah(TestFoo): . 
test_blee(TestFoo): . 

Finished in 0.007 seconds. 

2 tests, 15 assertions, 0 failures, 0 errors 
+0

從Rails的`rake tests`任務有沒有同樣的方法來做到這一點? – nertzy 2008-10-06 19:01:20

4

這是我所用,在test_helper.rb中

class Test::Unit::TestCase 
    # ... 

    def setup_with_naming 
    unless @@named[self.class.name] 
     puts "\n#{self.class.name} " 
     @@named[self.class.name] = true 
    end 
    setup_without_naming 
    end 
    alias_method_chain :setup, :naming unless defined? @@aliased 
    @@aliased = true 
end 

的@@別名變量保持其再次走樣當你在多個文件上運行一旦; @@ named在每次測試之前保持顯示名稱(在第一次運行之前)。

0

感謝大家的幫助,我最終要通過測試並增加了呼叫在每個設置方法爲這些過去的幾個答案之前,每個測試文件log_name上來。再次感謝。

相關問題