seach_formオブジェクトのテスト

検索項目が多い検索フォームを実装する時は、form_forヘルパーとActiveModel::ModelをMixinしたオブジェクトを使ってると思う。
(こういうやつ→http://kazuph.hateblo.jp/entry/2012/10/06/222831)
その検索フォームで使ってるオブジェクトのテストを書いてみた。

describe PresenterForm do
  fixtures :all

  subject { form_obj.presenters }

  describe 'ユーザ' do
    let(:form_obj) { PresenterForm.new(user_id: "1") }
    it { should include find_presenter }
  end

  describe '都道府県' do
    let(:form_obj) { PresenterForm.new(prefecture_id: "1") }
    it { should include find_presenter }
  end
  .......
end

find_presenterメソッドは、spec/support/配下に定義してとりあえずラップしてるだけ。

def find_presenter
@_presenter ||= Presenter.find(1)
end

FactoryGirlを使って、テスト毎にレコードをcreateしていると、
時間がかかるのと、レコードが増え過ぎてページネーションが起きて期待するレコードが隠れて期待通りの結果にならないことがあるので、
こういうケースはfixtureがいいと思ってる。

また、4行で1メソッドのテストが書けてるのと、deforeないし、describe毎に規則性があって読みやすい気がする。