2009-02-19 130 views
0

所以我決定調查Rails測試的狀態。在閱讀了一些關於如何討論Rails的測試文檔是否殘暴的接受答案之後,我開始同意。到目前爲止,我顯然不在理解Rails測試的人羣中 - 即使我理解了框架,或者我也這麼認爲。Shoulda:測試控制器過濾器

我讀過Shoulda是一個很好的插件,所以我使用它。我的第一個測試:「確保方法需要一個ID參數」...確定這是有道理的;我想確保我的控制器上的before_filter:validate_id實際工作。這是測試我的索引的GET按其應有的方式工作所需的3中的第1步。失敗!顯然,測試環境中運行不同於正常的Rails堆棧:

... 
lib/action_controller/base.rb:524:in `process_without_filters' 
... 

檢查,我到處都可以導致幾乎沒有任何信息,包括過濾器時的ActionController :: TestCase的用途得到{}。我在哪裏加入「Rails測試人員俱樂部」,這樣我可以弄清楚這一點?

context "GET :index requires id" do 

    setup {  
     get :index 
    } 

    should_redirect_to('/') { } 

    end 

回答

0

你確定失敗與before_filters有什麼關係嗎?我不認爲它確實如此。查看堆棧的其他錯誤......我可以用登錄要求測試我的應用程序沒有問題。

你斷言該索引需要一個ID ...但請求沒有一個。它是否因爲沒有ID而拋出錯誤?也許你需要捕捉它,或者用assert_raises測試失敗模式。

+0

我的過濾器檢測ID是否存在並且有效。如果不是,則重定向到「/」。我確信這是問題,因爲我運行測試時得到的錯誤是id/filter生成的對象爲nil的結果。 – Bill 2009-02-19 23:40:55

0

我同意安德魯說,問題可能在別處。我有很多功能測試可以與控制器一起使用before_filters,並且從未遇到過您指定的問題。