RSpecを始める時の準備をまとめた

プログラミング

RSpecを今から始める人向けに、RSpecを始める時の前準備というか、予備知識的なのを解説していきます。

ここに書かれていることは、どのみち必要になるかと思いますので、参考にどうぞ。

①単体テスト、結合テスト、総合テストをざっくり解説

単体テスト

メソッドや関数が要件通りに動くかを確認する。

RSpecだと「/models」や「/controllers」。

結合テスト

単体テストで検証したプログラムを組み合わせて行うテスト。

要は、各機能のテスト。

RSpecだと「/requests」。

総合テスト(ブラウザテスト)

複数のエンドポイントを利用してユーズケースのシナリオが上手くいくかをテスト。

要は、ユーザーが画面を使って操作するのをテストコードで自動化してするテスト。

RSpecだと「/systems」。

②ひな形

たとえば、投稿機能のブラウザテストの場合。

require 'rails_helper'
RSpec.describe Post, type: :system do
  describe '' do
    context '' do
      it '' do
       
      end
    end

みたいな感じ。基本的には、ひな形→include→letやbeforeなど→関数定義→describe→context→itの順になる。

includeはヘルパーなどを呼び出したいときに、「include ApplicationHelper」というように「RSpec.describe Post, type: :system do」直下に書くことが一般的。

③factory_botの定義の仕方

RSpec.describe User, type: :model do
  let(:user){ FactoryBot.create(:user) } #通常の書き方 DB登録される
  let(:user){ create :user} #省略記法

  let(:user){ FactoryBot.build (:user)} #通常の書き方 DB登録されない
  let(:user){ build :user} #省略記法

  let(:user){ build :user, name: "hogehoge"} #上書きすることも可能
end

だいたいこんな感じ。

DB登録する場合は

@user = create(:user)

DB登録しない場合は

@user = build(:testuser)

属性を上書きしてDB登録する場合は

@user = create(:user, name: "username")

こうする。

④factory_botの準備

factory_botに仮想的にユーザーや投稿などを登録しておく必要がある。

「/factories」直下のファイルにコードを記述する。

たとえば、以下のような感じ。

モデル名そのままの場合

FactoryBot.define do
  factory :user do
    name { "testuser1" }
  end
end

モデル名以外の名前を付ける場合

FactoryBot.define do
  factory :testuser, class: User do
    name { "testuser2" }
  end
end

モデル名以外の場合はクラスを指定する必要がある。

⑤factory_botのアソシエーションの書き方

# spec/factories/comments.rb
FactoryBot.define do
  factory :comment do
    association :user # => 今回のように関係するモデルとファクトリ名が同じ場合は user だけでもOK(※)
  end
end

⑥モジュール等(spec/support)の自動読み込み

spec/rails_helper.rbに以下のコードを追加。

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

これで、いちいち各RSpecのファイルでincludeで呼び出さなくても自動で「spec/support」直下のファイルが呼び出されるようになる。と

まあ、準備としてはだいたいこんなもんですね。

RSpecのビギナーには参考になると思います。

次は、RSpecの本文の基本文法について解説していきたいと思います。以上!

コメント

タイトルとURLをコピーしました