测试视图助手:如何指定控制器?

时间:2011-01-12 16:49:27

标签: ruby-on-rails testing view ruby-on-rails-3 helpers

例如,考虑以下代码:

class ViewHelpersTest < ActionView::TestCase
  should 'generate tag with correct parameters' do
    assert_equal theme_stylesheet_link_tag('style', :media => 'print'),
                 '<link href="/themes/default/stylesheets/style.css" media="print" rel="stylesheet" type="text/css" />'                     
  end
end

current_theme_stylesheet_tag是一个视图助手,它创建一个样式表链接标记,指向位于当前主题目录中的css文件。可以通过调用ApplicationController::current_theme来检索当前主题。

所以,我需要提供一个有效的控制器实例,这让我想到了我的问题:

在Rails 3中测试视图助手时,我究竟如何指定要使用的控制器?

此外,如果有更好的方式来表达此测试,请告诉我。我没有多少测试经验。

2 个答案:

答案 0 :(得分:2)

我不是测试帮助程序的忠实粉丝,但是如果你这样做最好将其作为单元测试来处理,那么你想要将方法与依赖关系隔离开来。在这种情况下,您可以只创建一个模拟对象并存根必要的方法调用,而不是尝试创建一个控制器对象。

在RSpec中,这可能会这样,假设您的current_theme方法只返回一个字符串:

describe ViewHelper do
  it "should generate tag with correct parameters" do
    ApplicationController = double(:current_theme=>"A string")
    helper.my_helper_method("argument").should == "A string"
  end
end

当辅助方法执行ApplicationController::current_theme时,它使用存根而不是实际方法,因此不需要实例化控制器,甚至不需要控制器代码。

答案 1 :(得分:0)

我不是测试专家,但我想知道这应该是控制器测试而不是视图测试。例如,Rails指南将视图测试描述为“断言关键HTML元素及其内容的存在。”

如果您在控制器中设置主题,可以在那里进行测试吗?

相关问题