🧪
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 단위 테스트
인증/권한 테스트