概要
- PATCHリクエストのテストで詰まった以下の2点についてのメモです。
- ストロングパラメーターをpassするようにパラメーターを付与する方法
- オブジェクトの更新をテストする方法
前提
- 詳しい話はわからずに解決した方法を書いているため、間違いやツッコミがありましたらコメントをいただけると助かります。
ストロングパラメーターをpassするようにパラメーターを付与する方法
it '名前が更新される' do
user = create(:user, name: 'hoge')
patch user_path(user, user: { name: 'new_hoge' }) # このように書くとストロングパラメーターに許可された形でパラメーターを送れる
expect(user.name).to eq 'new_hoge'
end
しかし、これではuser.nameはhoge
のままであるため、テストはfailしてしまいます。
原因は、user
はあくまで変数であり、DBの方でuser.nameに変更があったとしても変数user
には変更が反映されていないためです。
オブジェクトの更新をテストする方法
先ほどのテストがfailしてしまう原因は
user
はあくまで変数であり、DBの方でuser.nameに変更があったとしても
変数user
には変更が反映されていないためです。
そのため、変数userに変更を反映する必要があります。
その時に使えたのがreload
でした。
具体的には以下のように追記することでテストがpassすることができました
it '名前が更新される' do
user = create(:user, name: 'hoge')
patch user_path(user, user: { name: 'new_hoge' })
user.reload # 追記
expect(user.name).to eq 'new_hoge'
end
感想
PATCHリクエストを書くだけでも学ぶことが多いですね。
ストロングパラメーターの復習にもなって学びが多い挫折でした。