【Rails】テストコードの使い方、所感、学習したことまとめ
こんばんはサイコマン太郎でっす。
カフェラテ(砂糖なし)を飲みながら休憩がてら、僕が最近戦っていたテストコードのあべこべを。
テストコードとは?
既に記述されているコードがどのように動作するかを確認すること。デバック。
まずはRspec(gem)をインストールしました。
・「正常系テスト」と「異常系テスト」
正常系テストとは、「意図してる動きができているか」を確認する。
異常系テストとは、「意図してないとき、ちゃんとエラーを出すか」を確認する。
モデルやコントローラーなど、機能ごとにテストする
・モデルの単体テスト
モデルのテストでは記述されているバリデーションやメソットの検証をする
・コントローラーの単体テスト
「リクエストとレスポンス」がどのような動きをするかテストする
・exampleの整理(テストコードを書くときに多分一番重要)
「どのような状況のテストを行うか」をリスト化する
例:nameフォームに入力がないとき新規登録できない(エラーを出す)
:passが6文字以下であれば新規登録できない(エラーを出す)。。。など。
これが一番センスが問われ、禿げます。慣れろ。
・エクスペクテーション
expect().to /macherを唱えると「このテストをする」という宣言ができます。
・マッチャン
松本人志。
・マッチャ
macherは結構いっぱい種類があるのでざっくりまとめ。
・valid?
バリデーションが仕事してるか確認します。エラーが出なければtrueです。
・be_valid
expect()の中に入れたインスタンスがバリデーションを通過するかテストする
・include
expect(引数)の中と比べて、include(引数)の内容が含まれているか確認する
・eq
expect(引数)と.eq(引数)が等しいか確認する。
☆結合テストコード
単体テストコードの対で、「ユーザーが操作する一連の流れ」の中で問題がないかテストします。
基本的な流れは単体テストと一緒で、
[exampleを整理]
↓
[expectをホニャホニャする]
という感じですが、
コードによってブラウザを移動したり、フォーム内に記述させたりする動きが出てきます。
個人的な所感だと、CLI(ターミナル)の操作に似ていると感じました。
@結合テストで出てきたマッチャン
・visit
visit ●●●_path で、pathのpageに移動できます。(CLIで言うcd ~/~みたいな感じ)
・have_content
expect()の中に、content(’文字列’)の文字列が含まれているかを確認(inclideとの違いは文字列か、値か)
・have_no_content
have_contentの逆で、('文字列')が入ってないよね?と言う確認
・fill_in
指定した入力フォームに指定の値を入れてテストすることができる
・chenge
パネマジでブス嬢が来た時、アレをアレする
モデルの数がいくつ変動するか確認する
expect{動作}.to change{モデル名.count}by()
・.hover
find(HTMLの要素).hoverで、「指定した要素にカーソルを合わせる」と言う命令ができる(マッチャじゃないかも)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
と言う感じで、今日のアウトプットでした。
FactoryBotとFakerについても触れるとより良いかもですが、長いand疲れたのでこの辺にしときます。
またなんかあれば書きます。