【Rails#12】単体テストの実装とバグ潰し【Model】

【Rails#12】単体テストの実装とバグ潰し【Model】

コジマです。

【Rails#11】モデルのテストデータ作ろうぜ【Fixture】
の続きです。

思ったより長くなってしまったんですよね。

対象読者は前回と同じ

<

h1>対象読者

Progate終わったけどテストの方法も覚えたい、って人
Railsでテスト作る時どう考えりゃいいんだ?って人
Fixtureやminitest復習したい人

この記事でやること

今回は

  • モデルの単体テストの実装
  • バグ潰し(モデルのバリデーション定義)

をしていきたいと思います。

予めお断りしておきたいのですが、
独学なのでこれで動くテストはできても正しい実装になっているかはわからないです。
申し訳ないです。

方針

方針としては
ユーザーデータに特定の値をセットし、user.valid実行時の戻り値を見る
trueであってほしいもの(正常系)はassert
falseであってほしいもの(異常系)はassert_notで判定していこうかと思います。

テストを作る

user_test.rbは上記の方針でこうなりました。

すっごい長いですが、単体試験はこんなもんかと。

minitest-reportersの設定

test_helperを編集して以下のようにします。

使い方はRailsチュートリアルにも書いていますが。
公式のgithubにも書いています。

テストを実行

今回テストするのはユーザーモデルだけに絞るのでこんな感じでコマンド実行


minitest-reportersを導入するとこうしてカラーで出てきます。
とても見やすくなります。

全文はこんな感じ

login_id:6項目
password:5項目
display_name:2項目
email:4項目
authority_flag:3項目
正常系:3項目
計23項目
で、正常系3項目、パスワードのnilチェック以外はまだ試験に失敗した状態です。

残り19項目の試験を通るようにモデルを定義していきます。

モデルを定義する

bcryptを使用するためにhas_secure_passwordだけは書いてました。
他の定義もしていきます。

前回の記事で書いた仕様に沿ってモデルを定義しました。

いざ、尋常に

テストを実行する。これで

できました!

あぁ、よかった。

本日スタテクさんのもくもく会に行っていたのですが、
authority_flagの設計がよろしくないというレビューを受けたので、
次回はカラムの定義の変更、前回と今回の記事の補足など書いていきたいと思います。

以上、コジマでした。

Rubyカテゴリの最新記事