TECH EXPERT 17日目 テストコード

テストコードでよく使う記述

describe #どんなテストコードかいてんの?
「〇〇について記述する」do~endの間に記述し、入れ子構造可能。

 

it   #こうなるはず
「どのような結果になることを試しているのか」do~endの間に記述し、入れ子構造なし。

 

example
上記のitに記述した内容の総称、itに書く、「こうなるはず」の例。

 

expect(X).to eq Y   #Xの結果はYなん?

eqのように結果を判断するものを、マッチャという。

 

context #どんな時を確認したいん?
特定の条件を分けたい場合に用いる。使用方法はdescribeと同じ。

どのような「状況」を確認したいのか

 

expect(インスタンス).to be_valid #インスタンス機能してるん?

expectのインスタンスが正しく保存されることを判断

 

expect(X).to include(Y)   マッチャ

「Xの中にYという文字列が含まれているかどうか」

 

マッチャ
expectの中の記述と、結果とのつながりを示す表現。

eqの場合は「XがYに等しくなる」を表現。

 

 

テストコードではマッチャを使用して期待通りの結果かどうか判断する。
正しい場合は緑色、正しくない場合は赤色


RSpecのテストコードを実行する際は、bundle exec rspec のコマンド

 

流れ


保存するデータの作成。

作成したデータが、正しく保存されるかどうかを確認する。


正しく保存されない場合、生成されるエラーメッセージが期待されるものかどうかを確認する。

 

 

binding.pryコードの中に打つことで、一度プログラム処理が止まり、その時点におけるコードの状態をみることができる。確認したい変数の直後に入れるようにします。

なんのパラメータが適応されてるか、わからない時も使える便利マン。

 

ターミナル実行  bundle exec rspec spec ファイル名

 

  〇〇.valid?     〇〇.errors    〇〇.errors.full_message  を活用。

(保存できんの?)  ←のエラー表示  ←のエラー文表示  

 

〇〇に自分が調べたい変数をかく、変数だけ実行ならその中身が表示される。

(例:user)

 

 

 

 

ーテストコードの効率化ー

 

FactoryBot インスタンス生成をまとめる テストコードで使う

 

factory :user do <spec/factories/users.rb に記述 #インスタンスの設定

#処理     

FactoryBot .build(:user) <spec/models/user_spec.rb に記述 #User のインスタンス生成

 

before  共通した記述を切り出す

テストコード実行前にFactoryBot .build(:user)を

セットアップする感じ※インスタンス変数にする必要あり。

 

before         do

@user=FactoryBot.build(:user)

 

 

Faker ランダムな値の生成 Gem

固定値をランダム化に (メルアド重複などで弾かれるケース考慮)spec/factories/users.rb に編集

 

 

 

追記

 

contextはどのような「状況」を確認したいのかをdescribeにネストして書く。


be_validを使用して、インスタンスが正しく保存されるか判断できる。

tweets.rb編集時は association :user    を追記 (users.rbのFactoryBotとアソシエーションがあることを意味)