我正在进行功能测试,需要断言某个控制器中存在某个XHTML标记。我基本上是这样做的:
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
并不能很好地处理,特别是当那些调用击中多个控制器时。 :(
我认为这里的教训是我们都清楚知道的,但有时很难接受:如果代码看起来很毛茸茸,你可能做错了。 ;)
答案 0 :(得分:2)
控制器没有“默认”视图或操作,此外,操作可以命名为您想要的任何名称,它们不必是标准index
,show
,{{1}等等...
对于您要测试的每个控制器,我可能需要new
个适当的操作。无论如何,每次测试都可能会有所不同,即使现在它们都有相同的要求,我认为无论如何为每个动作写一个是有意义的。
答案 1 :(得分:0)
尝试使用respond_to函数:http://www.ruby-doc.org/core/classes/Object.html#M001005 检查方法是否排除。