8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails6】 RSpecによる管理者(admin)機能のモデル単体テストの実装

Last updated at Posted at 2021-02-28

はじめに

サービスの品質を保つために必要不可欠なテストを実施しております。
今回は管理者権限の機能のテストを行っております。

今後も他のモデルについても実施し記事にしていきたいと思います。

なお、usersテーブルにadminカラムを含めております。

記事の紹介

よろしければご参考ください。

①以下Userモデルの単体テストコードの内容は以下の記事に記載しております。

②管理者機能の実装の記事は以下に記載しております。

前提

・以下のgemはインストール済み

  gem 'rspec-rails', '~> 4.0.0'
  gem 'factory_bot_rails'
  gem 'faker'

・管理者機能は実装済み

バージョン

rubyのバージョン ruby-2.6.5
Railsのバージョン Rails:6.0.0
rspec-rails 4.0.0

実施したテスト

image.png

usersテーブルのadmin

xxxx_devise_create_users.rb

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
     
# 〜省略〜

      t.boolean :admin,                default: false

# 〜省略〜

モデル内のバリデーション

app/models/user.rb

# 〜省略〜

  validates :admin, exclusion: {in: [true], message: "システムエラー:不正な値が入力されました"}

# 〜省略〜

FactoryBotの内訳

spec/factories/users.rb

# 〜省略〜

    admin                           {Faker::Boolean.boolean(true_ratio: 0.2)}

# 〜省略〜

テストコードの内容

spec/models/user_spec.rb
require 'rails_helper'

RSpec.describe User, type: :model do
  before do
    @user = FactoryBot.build(:user)
  end


# 〜省略〜

    describe 'adminのバリデーション' do
        context 'adminが登録される' do
          it "adminの値が空欄の場合" do
            @user.admin = nil
            expect(@user).to be_valid
          end
          it "adminの値がfalseの場合" do
            @user.admin = false
            expect(@user).to be_valid
          end
        end
        context 'adminの登録がうまくいかないとき' do
          it "adminの値がtrueの場合" do
            @user.admin = true
            @user.valid?
            expect(@user.errors.full_messages).to include("Adminシステムエラー:不正な値が入力されました")
          end
        end
    end


# 〜省略〜

補足説明

boolean型について

usersテーブルで使用しているbooleanについてです。
boolean型とはtrueまたはfalseの真偽値を判断する型です。

管理者機能では「trueかfalseか」をboolean型で管理します。
すなわち、userが管理者か否かの判別をつけることができます。

spec/factories/users.rb
 t.boolean :admin,                default: false

したがって、複数の管理者を選択することも可能です。

adminのtrueとfalseについて

管理者権限を与えたいユーザーに対し、adminの値をtrueとしています。

true  → 管理者
false → 管理者ではない

exclusionについて

含まないことを検証する場合に使用します。
今回はadminがtrueということを除外しています。
すなわち、adminはfalseの状態です。

app/models/user.rb
  validates :admin, exclusion: {in: [true], message: "システムエラー:不正な値が入力されました"}

Faker::Boolean.boolean(true_ratio: 0.2)について

今回はテスト上、adminをfalseの状態で進めたいです。

そこで以下のadminに関するFakerを使用しています。

spec/factories/users.rb
    admin                           {Faker::Boolean.boolean(true_ratio: 0.2)}

Faker::Boolean.booleanの種類について

真偽値において、trueもしくはfalseで進める際、場合分けができます。

Faker::Boolean.boolean #true

Faker::Boolean.boolean(true_ratio: 0.2) #false

単にtrue、falseで設定しても問題ありません。

テストコードの内容について

adminは本来seeds.rbにて初期データをセットしておりますので、本来登録はされません。
その登録をされないことのテストを実施しております。

異常 → 【adminが登録される】場合
・adminの値が空欄の場合
・adminの値がfalseの場合

正常 → 【adminの登録がうまくいかない】場合
・adminの値がtrueの場合" do

補足

adminは登録するされる場合以外にも、たくさんあります。

・displayが表示されるか
・投稿が閲覧できるか
・投稿が削除できるか
・ユーザー情報を閲覧できるか
・ユーザー情報を削除できるか などなど

正常、異常の場合を洗い出し、テストを行い品質を担保する必要があります。

以上です。

8
7
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
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?