Rails에서 RSPEC 테스트 작성 하기

rails·2021년 9월 1일
0

시행착오

목록 보기
3/7

라이브러리 설치

원활한 테스트를 위해 알스펙과 팩토리봇 잼을 추가 한다.
Gemfile

group :test do
  gem 'factory_bot_rails', '~> 6.1'
  gem 'rspec-rails', '~> 4.0', '>= 4.0.2'
end

bundle install명령어 실행해서 잼 설치

테스팅 작성

팩토리 작성 : 레코드를 하나하나 수동으로 생성 하는 수고를 덜어준다. 아이디는 auto-increase로, 제목은 임의로 준다. 여기에 Faker잼을 활용 하면 유용한 랜덤 이름들을 지정 하는 것도 가능 하다.

# spec/factories/genres.rb
FactoryBot.define do

  factory :genre do
    sequence(:id) {|n| n }
    title { "테스트 장르1" }
  end

end

모델테스트 작성 : 엑티브레코드 테이블에 해당하는 모델을 검증 하는 코드를 추가 한다.

# rspec spec/models/genre_spec.rb --fail-fast
require 'rails_helper'

RSpec.describe Genre, :type => :model do

  it "모델 생성 성공 해야 함" do
    expect(Genre.new).not_to be_valid
  end

  it "모델 저장 성공 해야 함" do
    genre = FactoryBot.create(:genre)
    expect(genre).to be_valid
  end
  
end

테스트 결과

문제 없이 잘 성공한다. 이제 더욱 복잡하고 다양한 유즈케이스를 추가 하면 된다.

API 리퀘스트 테스트 추가

RSPEC으로 모델 뿐 아니라 리퀘스트를 검증 해볼 수 도 있다.

# rspec spec/requests/user_genres_spec.rb  --fail-fast
require 'rails_helper'

RSpec.describe "User Genres API testing", type: :request do
  # 기존 장르 클리어
  Genre.in_batches(of: 10000).delete_all
  
  it "유저가 아이콘을 클릭 하면 장르 목록이 나와야 한다." do
    user1 = FactoryBot.create(:user)
    genre1 = FactoryBot.create(:genre)
    genre2 = FactoryBot.create(:genre)

    # 장르를 얻는다.
    get '/api/v1/asks/user_index_genres/', params: {}, headers: {'Authorization' => get_user_token(user1)}
    expect(response).to have_http_status(200)
    rtv = JSON.parse response.body
    genres = rtv['content']['genres']
    expect(genres.length).to eq 2
  end

end

참고로, 클리어 할때 레일즈 기본 destroy_all함수는 성능이 최악이기 때문에 아래 라이브러리를 활용 하였다.

gem 'delete_in_batches', '~> 0.2.0'
profile
rails

0개의 댓글