■
お疲れ様です!
前回まで単体テストコードについて学んできたので今回は結合テストコードについて復習していこうと思います。
まず、概要になりますが単体テストは機能ごとにテストを行うもので、今回復習する結合テストはユーザーの操作を再現してテストを行うものです。また、結合テストコードを実行するためにもSystem Spec(システムスペック)という技術を使用します。
これは結合テストコードを記述するための仕組みで大枠の記述はRSpecと変わりません。System Specを記述するためには、CapybaraというGemを用います。実際にはデフォルトでrailsには搭載されています。
では実際にテストコードを記述していきます。
rails g rspec:system usersとコマンドを入力してユーザー新規登録に関するテストを行うためにファイルを生成します。
まずはexampleを整理します。
新規登録できる場合とできない場合また、どのようなケースがあるか考えました。
この時、ポイントとしてユーザー目線であまり細かく考えずに、ブラウザでどのような操作をすると、どうなるのかを考えました。
実際に作業した内容を載せます。
- ユーザー新規登録ができるとき
- 正しい情報を入力すればユーザー新規登録ができてトップページに移動する
- トップページに移動する
- トップページにサインアップページへ遷移するボタンがある
- 新規登録ページへ移動する
- ユーザー情報を入力する
- サインアップボタンを押すとユーザーモデルのカウントが1上がる
- トップページへ遷移したことを確認する
- カーソルを合わせるとログアウトボタンが表示される
- サインアップページへ遷移するボタンや、ログインページへ遷移するボタンが表示されていない
- ユーザー新規登録ができないとき
- 誤った情報ではユーザー新規登録ができずに新規登録ページへ戻ってくる
- トップページに移動する
- トップページにサインアップページへ遷移するボタンがある
- 新規登録ページへ移動する
- ユーザー情報を入力する
- サインアップボタンを押してもユーザーモデルのカウントは上がらない
- 新規登録ページへ戻される
こんな感じでテストコードを書く前のステップとしてかなりこの洗い出しが重要に感じました。
ではまずトップページに移動をそう再現するかといったところですがvisit root_pathとすることで僕の場合はトップページに遷移することを表現しました。
RequestSpecにあるgetに似ていますが、getはリクエストを送るだけでvisitはそのページへ遷移することを意味します。
少し長くないそうなんのでまた明日更新します!
ではまた!