🧪

RSpec

BDD(Behavior-Driven Development) 테스트 프레임워크

RSpec은 Ruby/Rails에서 가장 널리 사용되는 테스트 프레임워크입니다.

RSpec.describe Post, type: :model do
  describe 'validations' do
    it 'title이 있어야 한다' do
      post = Post.new(title: nil)
      expect(post).not_to be_valid
      expect(post.errors[:title]).to include("can't be blank")
    end
  end

  describe '#published?' do
    context 'status가 published일 때' do
      it 'true를 반환한다' do
        post = Post.new(status: 'published')
        expect(post.published?).to be true
      end
    end
  end
end

테스트 종류:

  • Model Spec — 모델 로직, 유효성 검사, 관계

  • Request Spec — HTTP 요청/응답 (Controller 테스트 대체)

  • System Spec — 브라우저 시뮬레이션 (Capybara)

  • Mailer Spec — 이메일 발송

  • Job Spec — 백그라운드 작업

핵심 포인트

1

Gemfile에 rspec-rails 추가 → rails generate rspec:install

2

spec/ 디렉토리에 테스트 파일 작성 (_spec.rb 접미사)

3

describe "대상" / context "조건" / it "기대동작" 구조로 작성

4

expect(actual).to eq(expected) — 검증 (matcher)

5

let(:변수) { 값 } — lazy evaluation 변수 정의

6

before { 설정 } — 각 테스트 전 실행 (setup)

장점

  • 자연어에 가까운 문법으로 가독성 좋음
  • Rails의 모든 계층 테스트 가능
  • 풍부한 Matcher 라이브러리
  • 커뮤니티가 크고 자료 풍부

단점

  • 학습 곡선 (describe/context/it, let, subject 등)
  • 대규모 테스트 스위트는 실행 시간 길어짐
  • Minitest 대비 설정 복잡
  • 과도한 mock/stub은 취약한 테스트 유발

사용 사례

Model 유효성 검사 테스트 API 엔드포인트 테스트 (Request Spec) Service Object 단위 테스트 인증/권한 테스트