假设我们在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