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

发布于 2024-10-11 08:35:35 字数 658 浏览 2 评论 0原文

例如,考虑以下代码:

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

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

Consider, for example, the following code:

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 is a view helper that creates a stylesheet link tag that points to a css file located inside the current theme's directory. The current theme can be retrieved by calling ApplicationController::current_theme.

So, I need to provide a valid controller instance, which brings me to my question:

How exactly do I specify the controller to be used when testing view helpers in Rails 3?

Also, if there is a better way to express this test, please let me know. I have little experience with testing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

做个少女永远怀春 2024-10-18 08:35:35

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

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

I'm not a big fan of testing helpers, but if you do it's best to approach it as a unit test, so you want to isolate the method from dependencies. In this case, instead of trying to create a controller object, you can just create a mock object and stub the necessary method call.

In RSpec this might work like so, assuming your current_theme method just returns a string:

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

When the helper method executes ApplicationController::current_theme, it uses the stub instead of the actual method, so there's no need to instantiate a controller, or even to require the controller code.

赠佳期 2024-10-18 08:35:35

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

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

I'm not the testing expert but I wonder if that should be a controller test instead of a view test. For example, Rails Guides describes view tests as "asserting the presence of key HTML elements and their content."

If you're setting the theme in the controller, can you test it there?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文