【Rails6】 RSpec에 의한 관리자(admin) 기능의 모델 단위 테스트의 구현

소개



서비스 품질을 유지하기 위해 필수적인 테스트를 실시하고 있습니다.
이번에는 관리자 권한의 기능을 테스트하고 있습니다.

앞으로도 다른 모델에 대해서도 실시해 기사로 해 가고 싶습니다.

users 테이블에는 admin 열이 포함되어 있습니다.

기사 소개



원한다면 참고하십시오.

① 이하 User 모델의 단위 테스트 코드의 내용은 다음 기사에 기재되어 있습니다.

②관리자 기능의 실장의 기사는 이하에 기재하고 있습니다.

전제



· 다음 gem은 설치됨
  gem 'rspec-rails', '~> 4.0.0'
  gem 'factory_bot_rails'
  gem 'faker'

· 관리자 기능이 구현됨

버전



루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0

실시한 테스트





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"를 부울 유형으로 관리합니다.
즉, 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은 등록되는 경우 이외에도 많이 있습니다.

· 디스플레이가 표시되는지
· 게시물을 볼 수 있습니까?
· 게시물을 삭제할 수 있습니까?
· 사용자 정보를 볼 수 있습니까?
· 사용자 정보를 삭제할 수 있는지 등

정상, 이상의 경우를 씻어, 테스트를 실시해 품질을 담보할 필요가 있습니다.

이상입니다.

좋은 웹페이지 즐겨찾기