【連載 RSpec入門講座】第8回 「modelのテストを書いてみよう 壁|ω・)チラッ」


お久しぶりです。kanotanです。

ちょうど一ヶ月ぶりになってしまいましたが、元気に仕事やっております。

最近は仕事の他に、艦これとラブライブ スクフェスとWHITE ALBUM2をやっているのでとっても忙しいです。

技術力が上がったら自分でゲームとかも作ってみたいですね。

それでは、今回の講座に入っていきましょう。

前回 「FactoryGirlってどんな女の子? ☆(ゝω・)vキャピ」」は → こちら
————————————————————

(´・ω・`) 「前回はFactoryGirlについて書いたね」

( ´∀`) 「そだね。modelに合わせたテストデータを自動で作ってくれる便利なツールだよ」

(´・ω・`) 「今度はどんなことをやるの?」

( ´∀`) 「じゃあせっかくテストデータができたことだし、model側のテストもやっちゃおう」

(´・ω・`) 「はーい」

( ´∀`) 「じゃあ、前回と同じく今回テストするmodelの定義から確認してみるよ」

( ´∀`) 「modelの内容は前回の講座と同じにしてみたけど、念のためおさらいするよ」

・ShopはAreaに属する。
・複数のItemを持つ。
・area・name・emailのカラムに必ず値が入らなくてはいけない。
・emailは他のemailと重複してはいけない。

( ´∀`) 「じゃあ、実際にこのあたりの内容をテストするRSpecを書いてみようか」

(´・ω・`) 「以外とあっさりだね」

( ´∀`) 「まあ、やってることが関連とValidationのチェックだけだからね」

(´・ω・`) 「じゃあ説明よろしくっす」

( ´∀`) 「うぃっす」

( ´∀`) 「この部分がbelongs_toとかhas_manyのチェックだね」

(´・ω・`) 「関連のチェック1つずつのために毎回describeで囲むのは大変だから、中括弧で囲って省略してあるよ」

( ´∀`) 「shouldの後だからhas_many→have_many、belongs_to→belong_toに変わってるのに注意だね」

(´・ω・`) 「前置詞の後は動詞の原形・・・だっけ。中学生に戻った気分だよ」

( ´∀`) 「海の向こうでは老若男女問わず前置詞の後は動詞の原形だけどね・・・」

(´・ω・`) 「英語苦手・・・」

( ´∀`) 「さて、残りはだいたい似たようなことしかやってないから、emailのところでまとめて説明しちゃうね」

( ´∀`) 「model部分でuniquenessとpresenceがこんな感じで定義されてたね。それをRSpecでも書いてあげる、ただそれだけ」

( ´∀`) 「書き方さえ覚えれば簡単だね」

(´・ω・`) 「validate_presence_of で presense: true を、validate_uniqueness_of で uniqueness: trueをチェックだね」

( ´∀`) 「そうそう、modelのテストはまずはこの基本の形を覚えておこう」

(´・ω・`) 「はーい」

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

( ´∀`) 「今回はRSpecのうち、model同士の関連と、validationの書き方の方法を勉強したね」

(´・ω・`) 「こっちに書いとけば、controllerのテストでいちいちvalidationごとにチェックとかしなくていいのがいいね」

( ´∀`) 「いちいちcontrollerで毎回validationに引っかかるダミーデータを用意してたらキリないからね」

(´・ω・`) 「でも、validationってこれしかできないの?EmailとかURLの形式のチェックもしてみたいな」

( ´∀`) 「じゃあ、次回は色んなvalidationのRSpecの書き方について勉強しよっか」

(´・ω・`) 「はーい」

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

1ヶ月ぶりの更新となってしまいましたが、いかがでしたでしょうか。

modelのテストは当たり前のことばかり書いてる感じがcontroller以上に強くなってしまいますが、
テストを書いておくとDBの設計等を変更した時やサーバ構成を変更した際などに真の力を発揮してくれますよ。
Ruby on Railsを使ったアジャイル開発には必須とも言える内容なので、ぜひ覚えていきましょう!

次回 「validationのテストの前に、自作のvalidationを書いてみよう( ・∀・)つ旦~」」は → こちら

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