【Rails#11】モデルのテストデータ作ろうぜ【Fixture】

【Rails#11】モデルのテストデータ作ろうぜ【Fixture】

コジマです。

以前こんな記事を書いたんですよ。
「プロを目指す人のためのRuby入門」が流行ってるので便乗紹介しよう
流行りの本を紹介したのですが、その中でテストを先に作ってからエラーを潰すようにコーディングするやで。
と教えて頂きましたので、実際そうしていきたいと思います。

【Rails#10】slimで画面作っていきたいぞー!#gamewith_moku2
これの続きになります。
作成しているusersテーブルのテストを書きます。

今回から技術的な話題の時は対象読者も書いていこうかなと思います。
(もちろんそのほかの人も見ていいのよ!)

対象読者

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

では進んでいこう。

Gemfileを書いていくよ

まずはテストにあたりあると便利なGemfileを入れていこう。
今回はRailsチュートリアル準拠で書いていきます。

Gemfileに書きを追加していきます。

テストに使うGemって大きくRSpecとminitestがあるんだけど、
今回はminitestです。
理由としては

  • 公式のチュートリアルを参考にできる
  • Rubyっぽく書ける(Rubyなんだけど)

の2点です。ここでは自動化までは行わないのでguardはこの記事でこれ以降触れないです。

そしたらbundle installしてください。

ちゃんと依存関係含めてinstallされましたね。
(ちなみに依存の正しい読み方は「いそん」なんですよ)

テストを書く前に…

仕様をコメントで書いていくことにします。
どんなデータを用意すればいいか明確にするためです。

私が作成したusersテーブル
カラム名、型、概要、バリデーション(箇条書き)
login_id: string,ログインに使用するID
・重複なし
・半角英数字
・not nil
・4〜20文字
display_name: string,画面の表示名
・not nil
・1〜20文字
password_digest: string,ハッシュ化されたパスワード
・半角英数字
・not nil
・4〜20文字
email: string,メールアドレス
・重複なし
・メールフォーマット(詳細別途記載)
・not nil
authority_flag: string,管理者フラグ
・not nil
・「0」(一般利用者)か「1」(管理者)

モデルにバリデーションを与えていないですが、この条件を確認できるようなテストデータとテストを考えていきます。

こんな感じ。

  • 正常系と異常系に分ける
  • 境界値確かめる
  • 文字の方もチェック
  • not nullのカラムにnullは許さん

というのを意識しました。

Fixtureを作っていくよ

Fixtureってなーに?

Fixtureはテストデータのことで、
テスト用のDBを構築して、テスト用のDBにマイグレーションして使います。

テスト用のDBを作る

テスト環境を指定してマイグレーションをします。

これでOK

確認してみる

テスト環境を指定してdbconsoleを実行します。

こんな感じ。お試しにselect実行してみたのですが、
なんかデータが入ってますよね。このなんか入ってるデータが定義されているファイルを編集していきます。
test/fixturesの下にあるusers.ymlがそれにあたります。

デフォルトはこんな感じ。
詳しくは
http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
これを見ろって書いてある。優しい。
書き方としては、文字列を””で囲うことがない。インデント気をつける。
使い方としては、テストの中でクラス変数とメソッドのような書き方ができる。
って感じかな。(ざっくりすぎてごめんね)

Fixtureつくりましょう

Fixtureはあらかじめ入れておくデータなので重複用のデータを入れることにします。

データを反映させていく

以下のようにコマンドを実行し、反映と確認を行います。

テスト用のDBにusers.ymlの内容が反映されました。

結構なげえ。。。

ほんとはテスト完了まで1記事にまとめたかったのですが、

テストの実装とバグ潰しは
次の記事でやりたいと思います!

以上、コジマでした。

Rubyカテゴリの最新記事