【連載 RSpec入門講座】第5回 「edit・updateのテストを書いてみよう ∑(・ω・ノ)ノ」


こんにちは。川野です。

9月も終わりに差し掛かり、すっかり秋めいてきましたね。

9月の終わりと言えば最終回ラッシュの時期ですね。

半沢直樹も終わってしまいましたし、(弊社にも半澤という者がいるので、よくネタにしてましたw)
進撃の巨人もロウきゅーぶ!もきんいろモザイクもダンガンロンパも恋愛ラボもたまゆらも超電磁砲も終わってしまうので寂しいです(´;ω;`)
(あと何気にFree!も見てました。)

・・・まあ気を取り直してブログ書きますかね。それではスタート!

前回「new・createのテストを書いてみよう(ノ)・ω・(ヾ)」は → こちら

————————————————————

(´・ω・`) 「前回はnewとcreateについて教えてもらったね」

( ´∀`) 「newはともかく更新系のcreateはちょっと大変だったでしょ」

(´・ω・`) 「うん、あれは今までの中で一番大変だった」

( ´∀`) 「今回はeditとupdateをやるんだけど、実は今回やるupdateは、create並みに大変かも」

(´・ω・`) 「えー、まだ手強いやつがいるの?」

( ´∀`) 「大丈夫へーきへーき。createとupdateは押さえるべきツボがちょっと違うだけだから」

(´・ω・`) 「おー、それなら大丈夫かな?」

( ´∀`) 「じゃあ、newとedit、createとupdateをそれぞれ対比しながら勉強してみようか」

new

edit

(´・ω・`) 「ほー、editはnewに似てるけど、showにも似てる気がするね」

( ´∀`) 「うん、いい着眼点だ。あくまでも編集用のフォームを開くだけという点では、editはnewに酷似しているよ」

(´・ω・`) 「newは画面表示のテストだけだったけど、editはshowみたいにassignsのテストもあるね」

( ´∀`) 「それは編集元のデータがあるために、それを正しく指定しているかを検証する必要があるからだよ」

(´・ω・`) 「なるほど、だからshowみたいにパラメータで対象を指定してあげてるんだね」

( ´∀`) 「そゆこと。そして、そのnewとeditの差異っていうのは、そのままcreateとupdateの差異になってくるんだ」

(´・ω・`) 「なるほど、それがcreateとupdateの違いなんだね」

( ´∀`) 「そうそう。でもcreateを倒したショボーン君にとっては訳なく倒せる相手なはずだ」

(´・ω・`) 「うん、じゃあコードの方を比べてみたいな」

create

update

(´・ω・`) 「投げるrequestが post :create から put :update に変わってるね」

( ´∀`) 「他にも違いがあるんだけど、わかるかな」

(´・ω・`) 「attributes_forの前に id: @shop.id って書いてあるよ」

( ´∀`) 「そうそう。ここが今回の大事な部分。createと違って、updateはここで対象となるデータのidを指定する必要があるんだけど、これはattributes_forの記載と並べて書くことができるんだよ」

(´・ω・`) 「なるほどー。他には対象が一致することを確認している代わりに、be_persistedの記述が無くなってるね」

( ´∀`) 「うん。createの場合、作り出したデータは一度も保存されてないから、エラーが出た時には保存されてないわけだけど、updateの場合は元の値が既に存在するからね」

(´・ω・`) 「パラメータを指定して既にDBに保存済みのデータを呼び出してるもんね」

( ´∀`) 「だから仮にエラーが発生する方であっても、createと同じようにshould_not be_persistedなんて書いたらエラーになっちゃうよ」

(´・ω・`) 「なるほど。それならbe_persistedは省略だね。createより難しいところもあったけど、思ったよりすんなり終わったね」

( ´∀`) 「それはショボーン君がRSpecに慣れてきたって証拠だよ」

(´・ω・`) 「やったー。これからもがんばるぞ!」

————————————————————

今回のedit・updateはいかがでしたでしょうか。

editはshowやnewと大差ない内容だったかと思います。

updateの方はcreateの書き方が押さえられていれば、対象idの指定をきちんと行えば問題なく書けそうですね。

さて、次回のdestroyをもってRailsの基本的なcontrollerのテスト(index・show・new・create・edit・update・destroy)が出揃います。

まだまだ続けていきますので、引き続きよろしくお願い致します!

次回 「destroyのテストを書いてみよう o(`ω´#)o」は → こちら

この記事に対してコメントを書く