2014-05-17 34 views
0

假設我們有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將接受的對象作爲模板。
  • 我不知道如何得到渲染模板的結果。

什麼是正確的方法來測試這個?

回答

0

經過一番努力,我想到了這一點。我們的想法是創建一個代表模板的對象,將其傳遞給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 
相關問題