0
0

More than 1 year has passed since last update.

RailsでRSpecを使う

Last updated at Posted at 2022-02-21

Rspecを使う前の事前準備

RSpecのインストール

‘rspec-rails’というgemをインストールするとRSpecとRSpecのrails用の機能がインストールできます。

group :test do
  gem 'rspec-rails' # test環境だけにインストールする
end

bundle install

gemのインストールが終わったら以下のコマンドでRSpecに必要なディレクトリと設定ファイルが作成されます。

rails g rspec:install

これでrspecのインストールは終了です。

Capybaraのを利用できるようにする

・Capybaraとは
Webアプリ用のE2E(ある機能の初めから終わりまで)テスティングフレームワークのこと。Webアプリをブラウザで自動実行してくれる。
Capybaraを利用することで、実際にユーザーがアプリを利用する状態をテストすることができます。

・Capybaraの設定
RSpecのテストでCapybaraを使えるようspec/helper.rbに設定を追記します。

require 'capybara/rspec' # 追加

RSpec.configure do |config|
  config.before(:each, type: system) do # ここから
    driven_by :selenium_chrome_headless
  end                                   # ここまで追加
end

FactoryBotのインストール

・FactoryBotとは
テストデータを簡単に作成できる機能を提供してくれるgemのこと。

・FactoryBotのインストール

group :test do
  gem 'rspec-rails'
  gem 'factory_bot_rails' # 追記
end 

bundle install

RSpecの基本文法

describe '何をテストするのか(テストをする対象)', type: 'specの種類' do
  context 'ある状態・状況' do
    before do
      # テストをする前の事前準備
    end
    it '個別のテスト内容(~であるべき内容を書く)' do
      # テスト内容
    end
  end
end

'it'が実際のテストに当たる部分。'describe', 'context'は'it'に至るまでの状況の場合分けをする部分です。例えば、ユーザーがログインしているかしていないかで表示が分かれているであろうページをテストする場合

describe 'task一覧の表示をテストする', type: 'system' do
  context 'ユーザーがログインしている場合' do
    before do
      # ユーザーをログインさせておく
    end
    it 'task一覧が表示されること' do
      # task一覧の表示をチェックするコード
    end
  end
  context 'ユーザーがログインしていない場合' do
    # before doは必要無い
    it ' task一覧が表示されないこと' do
      # task一覧が表示されないことをチェックするコード
    end
  end
end

となります。
2つ目の'context'はユーザーのログインをする必要がないためbefore doは必要ありません。もし、両方のcontextでユーザーのログインが必要な場合はcontextの外にユーザーログインのbefore doを記述すればOKです。

・FactoryBotを使いユーザーを作成する
テストをする上で検証しなければいけないデータがある場合、FactoryBotを使いデータを作成しやすい状況にしておきます。

FactoryBot.define do
  factory :user do
    name {'user_1'}
    email {'test@co.jp'}
    password {'password'}
  end
end

先ほどのテストファイルで使用する場合FactoryBotを使いユーザーを作成、ログインさせる場合

describe 'task一覧の表示をテストする', type: 'system' do
  before do
    user_a = FactoryBot.create(:user) # ここでユーザーが作られる
  end
  context 'ユーザーがログインしている場合' do
    before do
      # ユーザーをログインさせる
    end
    it 'task一覧が表示されること' do
      # task一覧の表示をチェックするコード
    end
  end
  context 'ユーザーがログインしていない場合' do
    # before doは必要無い
    it ' task一覧が表示されないこと' do
      # task一覧が表示されないことをチェックするコード
    end
  end
end

RSpecを実行する

テストコードが書けたら実際にテストを実行してみましょう。

bundle exec rspec # 実行するファイル名を続けて書くとそのファイルだけが実行される。
2 examples, 0 failure

0 failureと表示されれば全てのテストが成功していることになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0