block

プログラミング初心者のアウトプットブログです。

【RSpec rails】 タスクの一覧表機能のsystemテストコード

テストすること

  • ユーザー1のタスクが画面上に表示されることを確認する
  • ユーザー1のタスクがユーザー2に表示されていないことを確認する(作成者のみに表示)

はじめに、FactoryBotでタスクのテストデータを作成できるようにしておく。

FactoryBot
FactoryBot.define do
  factory :task do
    name { 'タスク' }
    association :user
  end
end


テスト詳細
require 'rails_helper'

RSpec.describe "Tasks", type: :system do
  before do
  describe '一覧表示機能' do
    before do
      # ユーザー1を作成
      # ユーザー1のtaskを作成
    end
    
    context 'ユーザー1がログインしているとき' do
      before do
        # ユーザー1でログイン
      end
      it 'ユーザー1が作成したtaskが表示されていること' do
        # 作成済みのtask名が画面に表示されていることを確認
      end
    end

    context 'ユーザー2がログインしているとき' do
      before do
        # ユーザー2を作成
        # ユーザー2でログイン
      end

      it 'ユーザー1が作成したtaskが表示されていないこと' do
        # ユーザー1が作成したtask名が画面に表示されていないこと
      end
    end
  end
end


一覧表示のテストコード
require 'rails_helper'

RSpec.describe "Tasks", type: :system do
  describe '一覧表示機能' do
    before do
      @user_1 = FactoryBot.create(:user, nickname: 'ユーザー1', email: 'user1@com')
      FactoryBot.create(:box, name: 'タスク', user: @user_1)
    end
    
    context 'ユーザー1がログインしているとき' do
      before do
        visit root_path
        visit new_user_session_path
        fill_in 'メールアドレス', with: @user_1.email
        fill_in 'パスワード', with: @user_1.password
        click_on 'ログイン'
      end
      it 'ユーザー1が作成したtaskが表示されていること' do
        expect(page).to have_content('タスク')
      end
    end

    context 'ユーザー2がログインしているとき' do
      before do
        @user_2 = FactoryBot.create(:user, nickname: 'ユーザー2', email: 'user2@com')
        visit root_path
        visit new_user_session_path
        fill_in 'メールアドレス', with: @user_2.email
        fill_in 'パスワード', with: @user_2.password
        click_on 'ログイン'
      end

      it 'ユーザー1が作成したtaskが表示されていないこと' do
        expect(page).to have_no_content('タスク')
      end
    end
  end
end


mac-san.hatenablog.com


mac-san.hatenablog.com