例如,考虑以下代码:
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中测试视图助手时,我究竟如何指定要使用的控制器?
此外,如果有更好的方式来表达此测试,请告诉我。我没有多少测试经验。
答案 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元素及其内容的存在。”
如果您在控制器中设置主题,可以在那里进行测试吗?