【问题标题】:How do you spec an overridden Rails 3 FormHelper?你如何指定一个被覆盖的 Rails 3 FormHelper?
【发布时间】:2012-09-22 22:39:12
【问题描述】:

我已经覆盖了标准的 Rails FormHelper,让它以我们(几乎基于 Bootstrap)的格式(在http://www.likeawritingdesk.com/posts/very-custom-form-builders-in-rails 之后)吐出表单元素。

它工作正常,但很难为其编写规范。我正在使用这样的规范:

rendered_form = helper.my_custom_form_for(@account, :url => '/accounts') do |f|
  f.inputs do
    # This isn't rendered
    f.text_field 'name', :size => 30 
    # This is rendered
    f.select 'locale', options_for_select([%w(Australia en-AU), %w(UK en-GB)]) 
  end
end

呈现的内容包括选择标签,但不包括文本字段标签。我怀疑这是因为 ActionView 现在处理块的方式,附加块的返回值而不是块中每个语句的返回值。显然,当在应用程序的上下文中使用时,辅助方法会通过一些 ERB 并在该上下文中进行评估。

  1. 不能以这种方式测试渲染辅助方法,在一个块中包含多个语句,我说得对吗?
  2. 如果我是对的,那么在完整应用程序的上下文中创建一个与助手所做的事情相同的规范的最简单的方法是什么?制作一个 ERB 字符串并以某种方式将其传递给助手进行渲染?

【问题讨论】:

    标签: ruby-on-rails-3 twitter-bootstrap rspec2 erb actionview


    【解决方案1】:

    你解决了吗?我很好奇您是否只是在返回块中的最后一条语句。您是否尝试过更改 f.text_field/f.select 顺序以查看返回的内容?如果是这样,那么您只需要添加它们:

    rendered_form = helper.my_custom_form_for(@account, :url => '/accounts') do |f|
      f.inputs do
        f.text_field('name', :size => 30) +
        f.select('locale', options_for_select([%w(Australia en-AU), %w(UK en-GB)]))
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多