Rails の FormBuilder をテストしようと思ったら new にわたす template をどうすればいいかわからず困った
view 内の form_for
から instantiate_builder
を経てこういう形で呼びだされます。
builder.new(object_name, object, self, options)
self
is 何?かというと view から呼びだされるのでもちろん view ですが、FormBuilder 対象のテストなので view なんてありません。ので用意します。
class TestHelper < ActionView::Base; end
あとはいい感じにインスタンスを作成してメソッドを呼べば HTML が返ってきました。
require 'rails_helper' class TestHelper < ActionView::Base; end RSpec.describe WritingErrorFormBuilder::Builder do before :each do @test_model = build(:test_model) @f = WritingErrorFormBuilder::Builder.new(:test_model, @test_model, TestHelper.new, {}) end context 'text_field' do it 'not validated no error' do expect(@f.text_field(:text)).not_to have_tag('ul.errors.text') end it 'validated get error' do @test_model.valid? expect(@f.text_field(:text)).to have_tag('ul.errors.text') end end end