카테고리 없음
[Ruby] ruby의 matcher - .to change .and change
홍호나
2023. 8. 10. 13:24
`.to change`는 RSpec에서 사용되는 매처(matcher) 중 하나로, 어떤 조건이 변화하는지를 검증하는데 사용됩니다. 주로 데이터베이스나 객체의 상태 변화를 테스트할 때 유용하게 사용됩니다.
예시를 통해 이해해보겠습니다. 아래의 예시는 카운터 값을 0에서 1로 증가시키는 상황을 가정한 테스트 케이스입니다.
require 'rails_helper'
RSpec.describe Counter, type: :model do
describe '#increment' do
it 'increments the counter by 1 and updates the timestamp' do
counter = Counter.new(value: 0)
expect {
counter.increment
}.to change(counter, :value).by(1)
.and change(counter, :updated_at) # updated_at이 동시에 바뀌었는지를 함께 체크
end
end
end
위 코드에서:
- `counter.increment` 메서드를 호출하면서 기존 카운터 값을 0에서 1로 증가시키는 상황을 시뮬레이션합니다.
- `change(counter, :value)`는 `counter` 객체의 `value` 속성이 어떻게 변하는지를 검증합니다.
- `by(1)`은 변화량을 나타내며, 여기서는 카운터 값이 1 증가해야 하므로 `1`로 설정했습니다.
결과적으로 이 테스트 케이스는 `counter.increment` 메서드 호출로 인해 카운터 값이 1 증가하는지를 검증합니다. 만약 변화가 예상대로 일어나지 않는다면 테스트가 실패하게 됩니다.
`.to change` 매처는 변화를 예측하고 검증하는데 사용되며, 상태 변화를 테스트할 때 유용한 기능입니다.
.and change는 RSpec에서 사용되는 매처(matcher) 중 하나로, 하나 이상의 조건이 변화하는지를 함께 검증하는데 사용됩니다. 이 매처를 사용하여 동시에 여러 변화를 검증할 수 있습니다.