複数モデルのpost :createをテストするRSpecコード(Controller Spec)

スポンサーリンク

先日のエントリー、Railsのfields_forで異なるモデルを編集するフォームを作成 | EasyRamble で書いたようなケースの場合、複数モデルのオブジェクトを fields_for を使って1つのフォームから送信して、コントローラーの create メソッドで複数のオブジェクトを DB のレコードに保存する場合がある。

それで、RSpec のテストコードで Controller Spec を書こうとして、1つの post に複数のオブジェクト用のパラメータを渡す方法が最初分からなくて困りました。通常のオブジェクト1つを post する場合の ControllerSpec については以下を参照。

RSpec の ControllerSpec でパラメータとともに post 送信するテスト | EasyRamble

— 環境 —
rspec-rails 3.1.0

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

post :create にパラメータを複数指定すればOK

結論から言いますと、Controller Spec で普通に post :create のオプションとして、複数モデル用のパラメータを複数指定してやれば OK でした。サンプルのテストコードは以下のような感じで、first_model_params, second_model_params の2つを post メソッドのオプションとして渡す。ユーザーがログイン時は、モデルのレコードが1つ増えることを確認しています。

spec/controllers/some_controller_spec.rb

上記のようなテストコードで、複数モデル用のパラメータを post する Controller Spec を動作させることができました。Controller Spec でユーザーをログインさせる方法については、以下エントリーを参照。

Rspec で Controller テストの準備編 | EasyRamble

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
 
スポンサーリンク

Leave Your Message!