【问题标题】:Testing view helpers: how do I specify a controller?测试视图助手:如何指定控制器?
【发布时间】:2011-06-07 23:21:50
【问题描述】:

例如,考虑以下代码:

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 中测试视图助手时,我该如何指定要使用的控制器?

另外,如果有更好的方式来表达这个测试,请告诉我。我几乎没有测试经验。

【问题讨论】:

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


    【解决方案1】:

    我不是测试助手的忠实拥护者,但是如果您这样做,最好将其作为单元测试来处理,因此您希望将方法与依赖项隔离开来。在这种情况下,您可以创建一个模拟对象并存根必要的方法调用,而不是尝试创建控制器对象。

    在 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时,它使用存根代替实际方法,因此不需要实例化控制器,甚至不需要控制器代码。

    【讨论】:

    • 我很抱歉,但恕我直言,如果你是“测试助手的粉丝”并不重要。这是一种方法,所以应该测试一下。
    • 无需道歉 :) 如果您正在开发 BDD 样式,并且您已经在视图规范中指定了助手的结果,我认为不需要单独测试助手,特别是当您只重构视图代码时。但我承认,规范对于复杂的助手肯定有用。
    【解决方案2】:

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

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

    【讨论】:

    • 我实际上对测试工作流程非常陌生。我有其他助手可以生成我必须测试的标签,也许我应该编辑我的问题以包含该信息...
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 2011-05-18
    相关资源
    最近更新 更多