前提
本日学んだことを書いていきます。
本題
モデルスペック(Model spec)
モデルが正しく機能しているかテストする。
バリデーションのテストで使われることが多い。
リクエストスペック(Request spec)
GET/POST/DELETEなどのリクエストを送ったとき、正しいレスポンスが返ってくるかをテストする。
例えばGETリクエストなら正しくページが表示されるか、POSTリクエストなら正しくデータが登録されるか、などのテストを行う。
システムスペック(System spec)
ユーザーの立場に立って、想定通りの画面操作が行えるかどうかをテストする。
例えばリンクやボタンをクリックする、フォームに値を入力するなどの操作を1つ1つ行いながらテストする。
group :development, :test do
#省略
gem 'rails-controller-testing' # 追記
#省略
end
group :test do
#省略
gem 'webdrivers' # 追記
end
gem 'devise' # 追記
#省略
リクエストスペック用
rails-controller-testing:便利なマッチャーを提供してくれる
システムスペック用
webdrivers:Chromeとやりとりするのに必要なChromeDriver を含む
devise:ログインなどの認証処理に便利なヘルパーを提供してくれる
get xxx_path
xxxパスにGetリクエストを送る
expect(response).to xxx
リクエストを送った結果のレスポンスが xxx であることを確認する
be_success
成功レスポンス(=エラー無しのレスポンス)である
have_http_status "200"
レスポンスが200ステータス(ページが正常に表示された意味)を持つ
before do ... end
上記で囲んだ処理は、同じcontext(なければdescribe)内の it テストの前に毎回実行される
visit xxx_path
xxx_pathへ飛ぶ
expect(page).to have_content xxx / have_title yyy
開いたページにxxxが存在する / yyyというタイトルであることを確認
factory_bot_rails
→ファクトリを使えるようにするrails用gem
faker
→人の名前や料理名などをランダムで自動生成してくれるgem。
例えばテストユーザーを100人作りたい場合などに、「ありそうな名前」を100人分自動生成してくれる便利なgem
let(:user) { create(:user) }
user = create(:user)とほぼ同義。違いとしては、letを使うと遅延評価になる。
つまり、userという変数が必要とされるまで式が実行されない。
create(:user)によってユーザーファクトリからサンプルユーザーを作成し、userという変数に代入している。
fill_in A, with: B
Aの欄にBと入力する
click_button A
Aボタンをクリックする
have_css 'input#user_email'
特定のCSS要素が存在することをテストする。
expect(A).to be_truty
「A式の戻り値がtrueであることを確認する」という意味。
expect(A).not_to ...
toの逆で、「...でないことを確認する」という意味。
to_notでも同じ意味になる。