我正在進行功能測試,需要聲明某個XHTML標記存在於某個控制器集合中。基本上,我這樣做:如何確定Rails控制器的默認操作?
class ApplicationControllerTest < ActionController::TestCase
def setup
@controller = ApplicationController.new
end
# [...]
def test_foo_bar_and_baz_include_stylesheet
[FooController, BarController, BazController].each do |controller|
@controller = controller.new
get :show
assert_select 'head > link[rel="stylesheet"]'
end
end
end
的問題是,不是所有的控制器具有:show
作用。我需要做的是向控制器或路由配置詢問控制器的默認操作,並以此調用get
。
更新:Joseph Silvashy是正確的:我最終將我的控制器get
分成單獨的測試用例。解決「默認」路線問題已經夠糟糕了,直到我發現我的一些路線附加了條件,我將不得不解析它們以制定正確的get
呼叫。最後,Rails功能測試在同一個測試用例中多次調用get
的效果並不好,尤其是當這些調用正在觸發多個控制器時。 :(
我認爲這裏的教訓是一個大家都知道的心臟,但有時是難以接受:如果代碼看起來毛茸茸的,你可能就錯了;)
那麼有沒有辦法以編程方式訪問路由信息? – 2011-04-13 08:59:01
考慮到我測試的特殊性,我嚴重懷疑測試會發生偏差,所以我認爲我目前的方法可能是體面的。 – 2011-04-13 09:00:27
當然你可以從以下路由獲得路由:'ActionController :: Routing :: Routes' – 2011-04-13 10:11:27