단일 테스트 코드의 실현

12895 단어 testRubyRails
내 비망록으로서, 나는 간단하게 테스트 코드의 실현을 여기에 남길 것이다.
전제 조건으로 이번에 사용자가 새로 로그인한 단일 테스트 코드를 제작한다.
테스트 내용은 nickname, email, password, password_4개의 confirmation을 테스트합니다.

준비


우선gemfile에서 테스트에 사용되는gem를 설명합니다
※ 기술한 부분은 그룹:development,:test do에서 기술해야 합니다.
만약 네가 여기에 묘사한다면, 너는 테스트할 때만 그것을 사용할 것이다
gemfile
group :development, :test do

  gem 'rspec-rails'         #この4行を記述、テストするためのgem
  gem 'factory_bot_rails'   #この4行を記述、テンプレート的なやつを作るgem
  gem 'faker'               #この4行を記述、テキトーな文字列などを入れてくれるgem
  gem 'pry-rails'           #この4行を記述、binding.pryで処理を止めれるようにするgem

  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
상술한 설명을 완성한 후 터미널에서 다음과 같은 조작을 실행한다
단말
% bundle install
% rails g rspec:install
이 파일들을 완성하면
단말
create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb
.rspec 파일에 다음과 같은 내용을 기술하였다
.rspec
--require spec_helper   #デフォルトで入ってる
--format documentation   #この行を追加
이 설명은 터미널에서 테스트 코드를 시각화하는 데 사용됩니다.

모형 준비


다음 명령을 사용하여 모델 생성(이번에 사용자 모델 생성)
단말
% rails g rspec:model user
이걸 만들면...
단말
 create  spec/models/user_spec.rb
 invoke  factory_bot
 create    spec/factories/users.rb

테스트 내용 확인


spec/models/user_spec.rb
require 'rails_helper'

RSpec.describe User, type: :model do
  describe "ユーザー新規登録" do
    it "nicknameが空では登録できない" do
      # nicknameが空では登録できないテストコードを記述します
    end
    it "emailが空では登録できない" do
      # emailが空では登録できないテストコードを記述します
    end

    it "passwordが空では登録できない" do
      # passwordが空では登録できないテストコードを記述します
    end

    it "password_confirmationが空では登録できない" do
      # password_confirmationが空では登録できないテストコードを記述します
    end
  end
end

해설을 알면 무시할 수 있어요.


① describe'하고 싶은 테스트 내용'do~end
"하고 싶은 테스트 내용"에 내용을 기술하고, 이번에는 사용자 관리 기능에 대한 테스트를 기술한다.
② it'조건'do~end
조건 섹션에서 테스트할 조건을 설명합니다.
잘 되었는지 확인하기 위해 명령을 집행하다
단말
% bundle exec rspec spec/models/user_spec.rb 

이게 터미널로 출력되면...

FactoryBot 및 Faker 사용


우선, 스펙 디렉터리에factories라는 디렉터리를 만듭니다. 그 중에서user.rb 만들기

만든 users.rb에서 다음과 같은 내용을 기술하다
spec/factories/users.rb(Faker를 사용하지 않을 경우)
FactoryBot.define do
  factory :user do
    nickname              {"test"}
    email                 {"test@example"}
    password              {"000000"}
    password_confirmation {password}
  end
end
spec/factories/users.rb(Faker 사용 시)
FactoryBot.define do
 factory :user do
   nickname              {Faker::Name.initials(number: 2)}
   email                 {Faker::Internet.free_email}
   password              {Faker::Internet.password(min_length: 6)}
   password_confirmation {password}
 end
end
이렇게 팩토리봇의 준비가 완성되었습니다!
①user_spec.rb 파일 RSpec로 돌아갑니다.describe 사용자, type:model do에 다음 세 줄 추가
② it do~end의 처리에서 실제로 이루어진 처리를 각각 기술한다
spec/models/user_spec.rb
require 'rails_helper'

RSpec.describe User, type: :model do
  #⬇︎この3行を追加
  before do
    @user = FactoryBot.build(:user)
  end
  #⬆︎この3行を追加
  describe "ユーザー新規登録" do
    it "nicknameが空では登録できない" do
      @user.nickname = ""
      @user.valid? 
      expect(@user.errors.full_messages).to include("Nickname can't be blank") 

    end
    it "emailが空では登録できない" do
      #⬇︎実際に行う処理
      @user.email = ""  
      @user.valid? 
      expect(@user.errors.full_messages).to include("Email can't be blank") 
      #⬆︎実際に行う処理
    end

    it "passwordが空では登録できない" do
      @user.password = ""
      @user.valid? 
      expect(@user.errors.full_messages).to include("Password can't be blank")
    end

    it "password_confirmationが空では登録できない" do
       @user.password_confirmation = ""
       @user.valid?
       expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password")
    end
  end
end
실행하자!
단말
% bundle exec rspec spec/models/user_spec.rb 

이게 뜨면...
오류가 발생하면 잘못된 곳에서 binding합니다.pry를 작성하고 실행합니다!
spec/models/user_spec.rb
it "nicknameが空では登録できない" do
      @user.nickname = ""
      @user.valid? 
      binding.pry  #ここで処理が止まる
      expect(@user.errors.full_messages).to include("Nickname can't be blank") 

    end
※ 처리를 중지하고 오류 내용을 확인하는 절차는 다음과 같습니다.
단말
pry(#<RSpec::ExampleGroups::User>)> @user.valid?   #エラーが出ているかの確認
pry(#<RSpec::ExampleGroups::User>)> @user.errors.full_messages  #エラーメッセージの確認

pry(#<RSpec::ExampleGroups::User>)> exit  #railsコンソールから脱出

좋은 웹페이지 즐겨찾기