본문 바로가기

소프트웨어-이야기/테스트-자동화

[Rspec]:all VS :each 차이

before(:all) VS before(:each)


before(:all)을 하면 모든 알스펙이 돌기 전에 한번만 블럭을 실행하는 거고, before(:each)는 각각 알스펙이 돌 때 한번씩 여러번 실행되는 걸 의미한다.

아래와 같은 케이스일 때 before(:all)을 사용하면 좋았다.

카우치베이스 테스트코드를 작성할 때 캐시에 값이 남아있어서 테스트코드가 마구 깨지는 케이스가 있었다. 그래서 각 테스트코드가 돌기전에 캐시들을 flush 해주는 함수를 넣어서, 캐시들을 다 날려버려줬었다. 그런데 flush는 응답속도가 느려서 테스트코드를 돌리는 데에 시간이 많이 걸렸다. 그래서 eache(:all) 블럭 안에 캐시를 flush하는 기능을 넣어서 테스트 코드를 돌릴 때 한번만 캐시를 날리도록 고쳤더니 조금 속도가 빨라졌었다.



주의사항

all으로 생성한 팩토리걸은 사용 후 삭제해줘야 한다. 왜냐면 all에서  팩토리걸로 생성된 데이터는 자동으로 삭제가 되지 않는다.

이번에.. 삽질을 했다. all을 알게되어 팩토리걸도 all에서 사용해서 썼는데, 자동으로 삭제가 안되어서

다음 테스트코드를 돌릴 때 계속 테스트코드가 깨지는 이슈가 있었다 ㅠ_ㅠ