#前提
本日学んだことを書いていきます。
#本題
#モデルスペック(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でも同じ意味になる。