2011-08-04 113 views
4

我有3個控制器,其中包括相同的模塊。在一個地方單位的模塊:導軌3 - 如何測試控制器模塊?

如何我測試測試?

我應該寫3次相同的功能測試的每個控制器(未DRY)?

的TestController/TestController1/TestController2:

class TestController < ApplicationController 
include TestModule 

test_module :test, :only => [:index] 
... 
end 

TestModule:

module TestModule 
extend ActiveSupport::Concern 

module ClassMethods 
    private 

    def test_module(resource, options = {}) 
    self.before_filter(options.slice(:only, :except)) do 
    puts 'test_module' 
    end 
    end 
end 
end 

提前感謝!

回答

2

控制器測試應該精確測試...控制器。因此,您爲控制器編寫的任何測試都應該驗證控制器操作是否完全符合您的期望,而不管您爲其執行的操作包含哪些模塊。把它們看作一個黑盒子,你所關心的只是給控制器一些輸入,然後驗證輸出是他們應該做的。

應測試模塊,因爲它是自己的實體,書寫實體模型和測試,以驗證充分各個模塊的方法。您的控制器可能會在將來發生變化,因此您可以隨時對模塊進行測試。

+0

感謝您的回答。我將爲我的控制器編寫測試。但是,如何爲我的模塊編寫單獨的測試(使用Test:Unit)?我必須嘲笑一個控制器?如果是的話,我應該在哪裏放這些測試,等等? – invaino

+0

這樣想:爲一個模塊寫一個測試就像爲一個模型寫一個測試。他們都在裏面有方法。所以當你調用或傳遞參數到一個方法中時,你希望某個結果不在方法中,這就是你應該在模塊中測試的東西。所以如果我調用'TestModule.create_something_amazing'並期望它爲我創造出驚人的東西,那麼測試應該驗證它是否符合我的期望。這些測試應該放在'Unit/lib'文件夾中,因爲你的模塊應該放在你的Rails應用的'lib'目錄下按照慣例 – iwasrobbed

+1

我測試過我的模型模塊,就像你說的那樣。但我不明白如何測試這個特定的模塊。因爲它是一個控制器的類方法。我需要控制器實例來驗證它的完整性,我不明白我該怎麼做。我不能在一個單元測試中調用test_module方法,它不起作用:( – invaino

0

您可能要學習使用標準工具,例如RSpec的測試控制器。

以下是鏈接Ryan Bates' Railscast

+0

那麼我知道如何測試一個控制器,在這種情況下,我只想弄清楚如何爲這個控制器模塊寫一個獨立的測試。 – invaino