테스트 기록 유출을 어떻게 처리합니까?
오늘 나는 CI에서 이상한 실패를 겪었고 조사하는 동안 다른 사양이 테스트 DB에 기록을 남기고 DB 트랜잭션 외부에서 작동하는 것이 분명해졌습니다.
거래성을 회피하는 두 가지 일반적인 방법을 알고 있습니다.
before(:all)
블록에 레코드를 생성합니다. 때때로 이것은 반복 설정 시간을 절약하기 위해 필요할 수 있지만 더 안전한 접근을 위해 TestProf 의 before_all
헬퍼를 살펴보십시오. describe "#some_method" do
# the two users fabricated in this hash will leak.
{
regular: FactoryBot.create(:user),
elevated: FactoryBot.create(:super_user),
}.each_pair do |permission_level, record|
it "works for '#{#{permission_level}}'" do
# some asserts ...
end
end
end
앞으로 이와 같은 경우를 방지하려면 테스트 DB에 앱에서 사용되는 인기 모델의 기록이 없는지 확인하는 간단한 후크를 설정하는 것이 좋습니다.
일반적으로 사양 도우미에 의해 로드되는 파일 위치에 배치합니다
spec/support/hooks/
.class RecordsLeftInTestDBError < StandardError; end
RSpec.configure do |config|
config.after(:suite) do
counts = {
some_records: SomeModel.count,
}
counts.values.sum.positive? &&
# I'd prefer `abort` to `raise`, but for some reason
# it does not fail the RSpec run when called from an
# after-suite hook like this.
raise(
RecordsLeftInTestDBError.new(
"Leak detected!\n" \
"Records in the test DB after running the suite:\n" \
"#{counts}",
),
)
end
end
Reference
이 문제에 관하여(테스트 기록 유출을 어떻게 처리합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/epigene/how-do-you-deal-with-test-record-leaks-eml텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)