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の本文の基本文法について解説していきたいと思います。以上!
コメント