RspecでStrongParamtersを使ってハマった

f:id:sktktk1230:20180726121250p:plain

rspecでStrongParamtersを利用したテストを書いた時にはまったので、備忘録として書いてみる

StrongParamtersとは?

4.5 Strong Parameters strong parametersを使用することで、Action ControllerのパラメータがActive Modelのマスアサインメントに利用されることを禁止できます。ホワイトリストに追記したもののみ使用できます。これは、多くの属性を一度に更新したいときに、どの属性の更新を許可し、どの属性の更新を禁止するかを明示的に決定しなければならないことを意味します。大雑把にすべての属性の更新をまとめて許可してしまうと、外部に公開する必要のない属性まで誤って公開されてしまう可能性が生じますので、そのような事態を防ぐために行います。 (Railsガイド)https://railsguides.jp/action_controller_overview.html

渡ってきたパラメータのホワイトリストを用意し、ホワイトリストの項目が存在しない場合にエラーとして処理することができるもの

今回ダメだった書き方

Rspec 3.1.0 使用 Rails 4.1.8 使用

let(:params) { { first_name: '佐藤', last_name: '太郎'} }

正しい書き方

単純でHashに対してStrongParametersを書くのではなく、ActionController::ParametersでNewする必要があった

    let(:input) { ActionController::Parameters.new(user: params) }
    let(:params) { { first_name: '佐藤', last_name: '太郎'} }