[Rails] Rspec을 사용한 테스트 코드

소개



Rspec을 도입하고 테스트 코드를 작성하려고합니다.
명령은 docker 환경의 명령을 사용합니다.

Gem 도입


group :development, :test do
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  gem 'faker', "~> 2.8"
end
docker-compose run web bundle installdocker-compose build설치 완료.

Rspec 설정


docker-compose run webrails g rspec:install위의 명령을 실행하면 다음 파일이 생성됩니다.
create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb
.rspc
--format documentation

코드 작성



spec/models/user_spec.rb
require 'rails_helper'

describe User do
  describe '#create' do

    it "usernameとemail,passwordとpassword_comnfirmationが存在すれば登録できること" do
      user = build(:user)
      expect(user).to be_valid
    end

    it  "usernameがない場合は登録できないこと" do 
      user = build(:user, username: nil)
      user.valid?
      expect(user.errors[:username]).to include("can't be blank")
    end

    it  "emailがない場合は登録できないこと" do 
      user = build(:user, email: nil)
      user.valid?
      expect(user.errors[:email]).to include("can't be blank")
    end

    it  "passwordがない場合は登録できないこと" do 
      user = build(:user, password: nil)
      user.valid?
      expect(user.errors[:password]).to include("can't be blank")
    end

    it  "passwordが存在してもpassword_confirmationがない場合は登録できないこと" do 
      user = build(:user, password_confirmation: "")
      user.valid?
      expect(user.errors[:password_confirmation]).to include("doesn't match Password")
    end

    it  "重複したemailがある場合は登録できないこと" do
      user = create(:user)
      another_user = build(:user, email: user.email)
      another_user.valid?
      expect(another_user.errors[:email]).to include("has already been taken")
    end

    it  "passwordが6文字以上であれば登録できること" do
      user = build(:user, password: "000000", password_confirmation: "000000")
      expect(user).to be_valid
    end

    it  "passwordが5文字以下であれば登録できないこと" do
      user = build(:user, password: "00000", password_confirmation: "00000")
      user.valid?
      expect(user.errors[:password]).to include("is too short (minimum is 6 characters)")
    end:grin:

  end
end

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    username                 {"aaa"}
    password                 {"000000"}
    password_confirmation    {"000000"}
    sequence(:email)     {Faker::Internet.email}
  end
end
docker-compose run web bundle exec rspec
8 examples, 0 failures

그렇다면 테스트가 잘 통과하고 있습니다.

결론



이번에는 Rspec을 사용한 테스트에 들어갔습니다.
앞으로 컨트롤러 테스트도 실시해 갑니다.
끝까지 읽어 주셔서 감사합니다

좋은 웹페이지 즐겨찾기