sugulogの日記

Rails、RSpec!テストに関する基礎知識を集めてみた!!No.2

f:id:sugulog:20201110032637p:plain
こんにちは、すぐるです!

sugulogをお読みいただきありがとうございます!!

このブログは、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準に書いています。

少しでもお役に立てれば幸いです。

 

今回は、RailsRSpecということで

  • テストに関する知識No.2

について簡単に解説します!!

その為このブログを読むことで、RSpecについて理解が深まるのはもちろん、テスト時のカンニングペーパーとしても役に立ちます。

是非最後までご愛読ください。

 

今回は、

  • コントローラーテストの事前準備

  • Faker

  • テストに関する知識

の順で解説していきます。

では早速、みていきましょう!!

・コントローラーテストの事前準備

それでは始めにgem "rails-controller-testing"という記述を、Gemfileのgroup :development, :test do〜endの間に記述し、bundle installしましょう!

そしてコントローラー用のspecファイルをspec/controllers/対象のコントローラ名_controllers_spec.rbという構造になるように作成します。

また対象のコントローラーファイルでbefore_actionでログインしていなかった場合にリダイレクトされるなどの制限を設けている場合は、一度コメントアウトし実行されないようにしましょう。

これでコントローラーをテストするにあたっての事前準備は終了です!!

・Faker

emailや電話番号、名前などのダミーデータを作成するGem。

導入方法としては、gem "faker", "~> 2.8"という記述をGemfileのgroup :development, :test do〜endの間に記述し、bundle installすることで導入できます。

FakerはFactoryBotを記述するrbファイルに利用することで、テストの際に必要なダミーデータを取得してくれます。

{}の中をFaker::ジャンル.タイトルで記述します。

ジャンル.タイトルについては公式リファレンスがあるのでそちらを参考に記述しましょう!!

・テストに関する知識

テストに関するメソッド、マッチャなどの知識を集めてみました。

・response

example内でリクエストが行われた後の遷移先のビューの情報を持つインスタンスのこと。

・create_list

factory_botの設定ファイルに存在しているリソースを複製する。第一引数に作成したいリソースをシンボル型で指定し、第二引数で作成したい個数を数字で指定する。

例)tweets = create_list(:tweet, 2)

・subject

expect内の引数が冗長になる際に別の場でそのコードをsubjectで示し、expect内の引数として利用できる。

・valid?メソッド

ActiveRecord::Base(モデルに使用するnewやcreateメソッドのこと)を継承しているクラスのインスタンスを保存する際に、バリデーションにより保存ができない状態であるかを真偽値で確かめるメソッド。

エラーがない場合trueを返し、エラーがある場合はfalseを返します。

・errorsメソッド

valid?メソッドを利用したインスタンスに対し使用することで、バリデーションによって保存できない状態(false)の場合、なぜ保存できないのかを確認するメソッド。

・httpメソッド

それぞれに対応するメソッド(get、post、delete、patch)が存在し、引数として利用したいコントローラーのアクションをシンボル型で渡す。また必要なパラメーターが存在する場合は、書くパラメーターをハッシュ形式で渡すことにより擬似的にアクションをリクエストすることができる。

例)get :show, params: { id: 2 }

・assignsメソッド

コントローラーのテスト時にアクションの定義しているインスタンス変数をテストするためのメソッド。引数に直前でリクエストしたアクション内で定義されているインスタンス変数をシンボル型で取る。

・includeマッチャ

引数にとった値(Y)がexpectの引数である配列(X)に含まれているかをチェックするマッチャ。

・be_validマッチャ

expectの引数にしたインスタンスが全てのバリデーションをクリアする場合にパスするマッチャ。

・render_templateマッチャ

引数にシンボル型でアクション名を取り、引数に指定したアクションがリクエストされた時に自動的に遷移するびゅーを返すマッチャ。

・matchマッチャ

引数に配列クラスのインスタンス取り、expectの引数と比較するマッチャ。配列の中身の順番までチェックする。

 ・be_a_newマッチャ

指定したクラスのインスタンスかつ未保存レコードであるかを検証するマッチャ。

・redirect_toマッチャ

引数にとったprefixにリダイレクトした際の情報を返すマッチャ。

・changeマッチャ

引数が変化したかを確かめるマッチャ。

 

以上、今回のブログでした。

RSpecについて理解が深まり、テスト時のカンニングペーパーとしても役に立ちそうですか??

次回は実際のテストコードを紹介しながら解説していきます。

是非そちらのブログもお読みください(≧∀≦)/

sugulog.hatenadiary.jp

 

最後に!!

今後も、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準にブログを書いていきます。

少しでも気になった方はお試しでもいいので1度、読者登録お願いします!

またTwitterでもプログラミングに関することを中心に情報を発信してます。

宜しければそちらのフォローもお願いします。

最後までご愛読いただきありがとうございました!!