如何确定Rails控制器的默认操作?

时间:2011-04-13 08:44:17

标签: ruby-on-rails functional-testing

我正在进行功能测试,需要断言某个控制器中存在某个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并不能很好地处理,特别是当那些调用击中多个控制器时。 :(

我认为这里的教训是我们都清楚知道的,但有时很难接受:如果代码看起来很毛茸茸,你可能做错了。 ;)

2 个答案:

答案 0 :(得分:2)

控制器没有“默认”视图或操作,此外,操作可以命名为您想要的任何名称,它们不必是标准indexshow,{{1}等等...

对于您要测试的每个控制器,我可能需要new个适当的操作。无论如何,每次测试都可能会有所不同,即使现在它们都有相同的要求,我认为无论如何为每个动作写一个是有意义的。

答案 1 :(得分:0)

尝试使用respond_to函数:http://www.ruby-doc.org/core/classes/Object.html#M001005 检查方法是否排除。