如何测试自定义的Padrino FormBuilder ?



假设我们在Padrino中有一个自定义FormBuilder,如下所示:

class CustomFormBuilder < Padrino::Helpers::FormBuilder::AbstractFormBuilder
  def foo(arg1, arg2, ...)
    # do something with #template
  end
end

测试这个的正确方法是什么?

正确的做法应该是:

describe CustomFormBuilder do
  it "renders the right output"
    # ...
    result = CustomFormBuilder.new(...).template.render
    expect(result).to include 'expected-content'
  end
end

我不清楚如何做到这一点:

  • 通常框架实例化FormBuilders,所以感觉我在这里做错了。有没有更好的方法?
  • 我不知道如何传递一个对象,FormBuilder将接受作为模板。我不知道如何得到渲染模板的结果。

测试这个的正确方法是什么?

经过一番努力,我终于明白了。这个想法是创建一个代表模板的对象,将其传递给FormBuilder,为模型创建另一个对象,然后查看构建器是否生成正确的HTML。

describe CustomFormBuilder do
  let(:template) do
    Class.new do
      include Padrino::Helpers::OutputHelpers
      include Padrino::Helpers::FormHelpers
      include Padrino::Helpers::TagHelpers
    end.new
  end
  it "makes a class" do
    model    = Class.new { include ActiveModel::Model }.new
    builder  = described_class.new template, model
    expect(builder.helper_method :foo).to include 'class="expected-class"'
    # or, if you're using rspec-html-matchers or something similar...
    expect(builder.helper_method :foo).to 
      have_tag('div', :with => { :class => 'bar' })
  end
end

最新更新