생각하게 된 계기
rspec을 쓰다 보면 애플리케이션 로직처럼 중복되는 코드가 많이 발생한다.
한 두개의 테스트라면 그렇게 까지 시간이 걸리지 않겠지만 점점 비슷한 코드가 늘어나면 같은 테스트 코드도 늘어나게 된다.
새로운 프로덕트를 만들기 시작하면서 이번 기회에 좀 정리해 놓으면 좋겠다고 생각하여 블로그에도 글을 올려본다.
shared_examples, shared_contexts
이번에 사용해보았던 메소드는shared_examples, shared_context
이다.
두 메소드에 대한 설명은 개인적으로 정리해보면 아래와 같은 형식으로 나누고 있는 것 같다.
shared_examples: 기대치에 대한 검증을 모아두기 위해 사용
shared_context: 조건을 모아두기 위해 사용
글 만 보면 확 와닿지 않은 부분이 있을 것 같은데, 예시를 보면 좀 더 가깝게 다가올 것 같다.
실제로 작성했던 코드를 조금 변경해서 작성해보았다.
shared_examples
먼저 it문을 공통화하는 코드를 작성해보았습니다. 권한에 대한 코드를 작성해야 할 필요가 있는데 이번 기회에 정리 해보았습니다.
shared_examples "admin권한 만 접속할 수 있는지 테스트" do
context "admin권한이 아닐 경우" do
let(:level) { :general }
it "404스테이터스를 반환" do
subject
expect(response).to have_http_status(:not_found)
end
end
context "admin권한인 경우" do
let(:level) { admin }
it "200스테이터스를 반환" do
subject
expect(response).to have_http_status(:ok)
end
end
end
# 실제사용 할 때 코스
context 'test' do
it_behaves_like 'admin권한 만 접속할 수 있는지 테스트'
end
shared_contexts
실제로는 메소드로 만들어도 되지만 이해를 위해 예시를 하나 만들어 봤다.
아래와 같이 테스트를 하기 위한 조건이나 변수등을 정리하는데 사용하면 좋을 것 같다.
shared_context "로그인" do
let(:user) { create(:user) }
before do
sign_in user
end
end
마무리
이번에 처음으로 직접 테스트 공통화를 진행해보았다. 테스트 공통화를 진행하면서 역시 중요한 것은 의존 관계를 최대한 줄이는 것이 중요한다고 생각했다🤔 어떤 환경에서도 최소한의 변수를 이용해 사용할 수 있어야 더 많은 곳에서 사용할 수 있고 더 많은 중복 코드를 줄일 수 있기 때문이다. 목표는 테스트를 공통화해서 템플릿으로 만들어서 최소한의 테스트는 빠르게 만들어내가는 것이 목표이다.
아직 시작단계에 불과 하지만 테스트에 중복을 줄이면서 어디까지 중복을 줄일지에 대해 고민해 볼 수 있어 좋은 시간이었다.
추가적으로 이번에 rails사용으로 유명한 gitlab과 sholify, forem의 코드를 직접 보고 공부 할 수 있어 좋았다.
디렉터리 폴더에 대해 고민할 때 참고하면 좋을 것 같다.
사용법에 대한 내용은 rspec 홈페이지를 보시면 됩니다!
https://rspec.info/features/3-12/rspec-core/example-groups/shared-context/
'Ruby on Ralis' 카테고리의 다른 글
[코드레뷰로 배우는 Ruby on Rails 2판] Model편 (0) | 2024.06.08 |
---|---|
2024 RubyKaigi를 참가했습니다! in Okinawa! (0) | 2024.05.20 |
Ruby의 구조: Ruby의 동작원리 (자구분석과 구문분석, 컴파일) (1) | 2024.01.10 |
Rails 이미지(img) 관리 (0) | 2021.02.01 |
[Ruby on Rails]로그인 기능을 구현 하자 (0) | 2020.12.06 |