1

DatabaseCleaner, FactoryGirlCapybara-Webkit을 사용하는 Rails 테스트 스위트가 있습니다. 모든 내 테스트는 스위트를 실행할 때 (병렬로 실행하는 경우 포함) 내 컴퓨터로 전달됩니다 (parallel_rspec).FactoryGirl 및 DatabaseCleaner는 통합 및 단위 테스트를 사용하여 전체 테스트 스위트에 대한 베스트 프랙티스를 제공합니다.

CI (circleci)를 누르면 통합 테스트에 항상 실패합니다. 내 단위 테스트 (컨트롤러, 서비스, 뷰 등 ...)에서 transaction 전략을 사용하고 있기 때문에 이것이 용의주도하다. 아마도 그것은 나쁜 습관이지만 컨트롤러 (예를 들어)에서 모델을 필요로한다면 나는 FactoryGirl.create(:my_model)을 수행하고 있습니다. 하지만 나는 FactoryGirl을 사용하여 모든 곳에서 DatabaseCleaner에서 truncation 전략을 사용해야한다는 모델을 만드는 데 의심 스럽습니다.

방금 ​​내 전체 제품군에 truncation을 사용하고 CI에 푸시되었습니다. 멋진 녹색이지만 이제는 실행에 50 % 더 오래 걸립니다. FactoryGirlActiveRecord 모델을 인스턴스화 할 때

그래서, 나는 항상 그 시험은 truncation를 사용하여 표시 해야합니까?

모든 의견을 보내 주셔서 감사합니다.

답변

0

잘라 내기 (또는 삭제)를 사용하도록 표시해야하는 테스트는 여러 연결을 통해 데이터베이스에 액세스하는 테스트입니다. 일반적으로 랙 테스트 이외의 드라이버를 사용하는 기능 테스트에 Capybara를 사용하는 경우 별도의 스레드에서 응용 프로그램을 실행하기 때문에 데이터베이스와의 연결이 이루어지며 권장되는 database_cleaner config - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example에 의해 처리됩니다 append_after은 매우 중요합니다.

다른 유형의 테스트는 일반적으로 여러 스레드 또는 연결을 만들지 않으므로 일반적으로 잘림이 필요하지 않습니다. 테스트에 필요한 데이터는 대개 FactoryGirl build_stubbed 메서드는 find으로 고정되어 스텁 된 객체를 반환하고 데이터베이스를 완전히 우회합니다.

또한 컴퓨터에서 테스트를 통과 한 경우 CI와 동일한 데이터베이스 클리너 방법을 사용하고 있다고 가정하므로 CI를 전달해야하므로 시간 문제가 더 많이 발생합니다.

0

또한 DatabaseCleaner에서 CI 컨테이너의 메소드를 설정하면 전체 실행에 맞게 설정되므로 기능/시스템 테스트가 아닌 별도의 컨테이너에서 단위 테스트를 실행하는 것이 좋습니다.