2011-03-03 1 views
57

before(:each) 블록을 사용할 수있는 rspec 테스트에서 Factory Girl의 목적은 무엇입니까? 팩토리 걸 (Factory Girl)과 before(:each)의 유일한 차이점은 팩토리가 테스트 외부에서 객체 생성을 준비한다는 것입니다. 이게 옳은 거니?공장 소녀 - 목적은 무엇입니까?

+0

을 좀 더 읽기를 원하는 경우

This book

이것은 ActiveReccord https://cbabhusal.wordpress.com/2015/04/21/ruby-on-rails-factory와 상호 작용 FactoryGirl 어떻게 잘 주제를 다룹니다 -girl-how-it-interacts-with-activerecord/ – illusionist

답변

59

보석은 Factory GirlSham과 같이 유효하고 재사용 가능한 개체에 대한 템플릿을 만들 수 있습니다. 데이터베이스에로드해야하는 고정 레코드가있는 고정 장치에 대한 응답으로 만들어졌습니다. 객체를 인스턴스화 할 때 더 많은 사용자 정의가 가능하며 작업 할 유효한 객체가 있는지 확인하려고합니다. 테스트 중 어디서나 테스트 후크에서 사용할 수 있습니다. (: 모두), (: 각각), (: 모두) 전에 모두 테스트 그룹간에 공유 될 설정 및 해체 장소를 제공하기 위해 노력합니다. 예를 들어 모든 단일 테스트에 대해 새로운 유효한 사용자를 작성하려는 경우 이전 (: 각) 후크에서이를 수행하고자 할 것입니다. 파일 시스템에서 일부 파일을 지우려면 이전에 해보려고합니다. 테스트가 모두 tmp 파일을 만들고 테스트 후 제거하려는 경우, 후 (: each) 또는 후 (: all) 후크에서 수행합니다.

두 가지 개념이 다른 점은 팩토리가 테스트 주위에 후크를 만드는 것이 아니라 유효한 Ruby 객체 및 레코드를 만들기위한 것이므로 객체 생성을 유연하게 유지하고 DRY를 유지할 수 있다는 것입니다. 사전 및 후크는 예제 그룹에서 공유되는 설정 및 해체 작업을 목표로하므로 설정 및 티 해드 코드 DRY를 유지할 수 있습니다.

+7

FactoryGirl 팩토리는'give_me_a_valid_model' 함수와 같습니다. 하나 이상의'before : each' 블록에서이를 필요로한다면, 그것은 당신에게 몇 번의 반복을 저장합니다. 유효한 모델 (연관성, 고유 값 보장 등)을 설정하는 것이 더 복잡할수록 더 많은 노력으로 절약 할 수 있습니다. –

17

FactoryGirl은 테스트에서 조명기를 대체합니다. 이렇게하면 데이터 모델을 변경할 때 조명기를 최신 상태로 유지할 필요가 없습니다. 고정 장치는 가장자리 케이스를 추가 할 때 다루기 힘든 경향이 있습니다.

FactoryGirl은 실시간으로 데이터를 생성하고 필드 추가 및 제거가 훨씬 쉽습니다. 또한, 조명기를 사용하는 방법과 같이 설정에서 사용할 수 있습니다.

그 점이 명확 해 졌습니까?

+2

잠시 후 공장들이 조명기를 "똑똑하게"대체한다는 것을 알게되었습니다. 나는 아직도 mock과 stub의 구분에 대해 더 많이 배우는 것에 관심이있다. – Docunext

+0

그래, 고마워. :) 그들이 조명기구를 대신 할 수 있다는 것을 알기 좋습니다. Hartl 자습서 (좋은, btw)가 비품과 공장 소녀 사이에 들어가고 나가기 때문에 조금 이상했습니다. 나는 혼란 스럽다. 이제는 더 자주 사용하겠습니다. :) – curiousdork

6

또한 조명기 정의는 전체 응용 프로그램에서 전역입니다. 팩토리는 로컬 일 수 있습니다. 따라서 격리 된 테스트 케이스와 관련된 데이터는 단일 글로벌 픽스처 파일이 아닌 해당 특정 컨텍스트에 대한 설정에 있습니다. 당신이 문제