describe/ it / expect
describe(RSpec.describe)는 테스트의 그룹화를 선언
번역하면 ~을 기술한다. ~을 설명한다 등의 의미
it은 테스트를 example단위로 정리하는 역할it do ... end
의 expectation이 모두 패스하면 그 example은 통과됨expect(X).to eq Y
처럼 기대값과 실제값을 비교함을 기술하는 것이 expectation.
Nested describe
describe
는 describe
안에 몇개든 네스트되어 사용할 수 있다.
기본적인 역할은 테스트의 그룹화 이므로 적절히 그룹화한다면 테스트가 어떤 기능을 테스트하는지 알기 쉽게 기술할 수 있다.
context and before
RSpec에는 describe
이외에도 context
라는 기능을 사용해 테스트를 그룹화 할 수 있다.
기능적으로는 같지만, context
는 조건을 조건별로 나눌 때 주로 사용된다.
before do ... end
는 example의 실행전 매번 불려진다.before
블록에는 테스트 실행 전, 공통처리나 데이터를 셋업하는 등을 기술하는 것이 일반적이다.
Use before in nested describe or context
before
는 describe
나 context
마다 사용가능describe
나 context
가 네스트되어 있는 경우 부모자식관계에 따라 before
가 순서대로 불려진다.
let
RSepc에서는 let을 사용하여 변수 선언이 가능하다.
let은 지연평가가 가능
예를 들어
RSpec.describe User do
describe '#greet' do
let(:user) { User.new(params) }
let(:params) { { name: 'name', age: age } }
context 'over 12' do
let(:age) { 12 }
it 'answer result' do
expect(user.greet).to eq 'I'm 12'
end
end
context 'over 13' do
let(:age) { 13 }
it 'answer result' do
expect(user.greet).to eq 'I'm 13'
end
end
end
end
이라고 했을 때 "over 13" 문맥에서,
최종적으로 user
는 User.new(name: 'name', age: 13)
을 갖게 된다.
subject
테스트대상의 오브젝트가 정확히 1개의 오브젝트일 때, subject
라는 기능을 사용해 코드를 DRY할 수 있다.
예를 들어 위의 코드를 subject
를 사용한다고 하면,
RSpec.describe User do
describe '#greet' do
let(:user) { User.new(params) }
let(:params) { { name: 'name', age: age } }
subject { user.greet }
context 'over 12' do
let(:age) { 12 }
it 'answer result' do
is_expected.to eq 'I'm 12'
end
end
context 'over 13' do
let(:age) { 13 }
it 'answer result' do
is_expected.to eq 'I'm 13'
end
end
end
end
로 바꿀 수 있다.subject { user.greet }
을 선언했으로 exptect
부분을 is_expected
로 바꿔 선언한 subject
를 실행하도록 한다.
이때 it
의 설명 부분도 생략이 가능한데,
it { is_extpected.to eq 'I'm 13 }
으로 축약할 수도 있다.
'프로그래밍 > Rails' 카테고리의 다른 글
Rails App에 Bootstrap 사용하기 (0) | 2020.12.30 |
---|---|
_path와 _url의 차이 (0) | 2020.11.10 |
Rails에 Rspec, Factory_bot 설정하기 (0) | 2020.10.14 |