0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【RSpec】PATCHリクエストで躓いた変数の更新やパラメーターの付与

Posted at

概要

  • 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することができました :smiley:

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リクエストを書くだけでも学ぶことが多いですね。
ストロングパラメーターの復習にもなって学びが多い挫折でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?