そのコード、なんとかなりませんか?

プログラミング初学者です。お手柔らかに

【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疲れたのでこの辺にしときます。

またなんかあれば書きます。

 

f:id:psychoshock0832:20220324055352j:plain