Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FactoryGirl 활용하기 #342

Open
shaynekang opened this issue Oct 19, 2014 · 1 comment
Open

FactoryGirl 활용하기 #342

shaynekang opened this issue Oct 19, 2014 · 1 comment

Comments

@shaynekang
Copy link

FactoryGirl을 활용할 때 몇 가지 원칙을 지키면 간결하고 명확한 단위테스트를 작성할 수 있습니다.

  1. DB에 저장할 필요가 없다면 #build를, DB에 저장할 필요가 있다면 #create를 활용한다.
  2. 넣어줄 값이 많지 않다면 #build, #create에서 한꺼번에 넣어준다.
  3. 언제든지 필요한 값은 spec/factories.rb 등에서 디폴트로 설정한다.
  4. 유니크한 값이 필요하다면 sequence를 활용해 매 번 다른 값을 생성한다.
  5. 테스트에 필요한 값은 명시적으로 할당해준다.

5번의 경우 부연설명을 하자면, 단위테스트 결과를 비교하는데 3번에서 지정한 값을 사용한다면 매 번 [spec/factories.rb](https://github.com/Donut Works/Ari/blob/2ca4af182a8acdaba71e628c3358c19ca14f6d09/spec/factories.rb)를 살펴봐야 합니다. 단위테스트가 직관적이지 않게 되죠.
그런고로 단위테스트 안에서 명시적으로 할당하는 것이 좋습니다.

가령 spec/unit/sms_sender.rb 코드의 다음 부분은

user = FactoryGirl.build(:user)
user.phone_number = "010-5445-0754"
user.save!

user2 = FactoryGirl.build(:user)
user2.username = "Tom"
user2.email = "[email protected]"
user2.phone_number = "010-3232-5374"
user2.save!

notice = FactoryGirl.build(:notice)
notice.save!

저라면 이렇게 수정할 것 같습니다.

user = FactoryGirl.create(:user, phone_number: "010-5445-0754")
user2 = FactoryGirl.create(:user, phone_number: "010-3232-5374")
notice = FactoryGirl.create(:notice)

단위테스트 구조상 username, email이 필요하지 않으니 굳이 선언해줄 필요가 없고, build - save!create로 고쳐줄 수 있습니다. 동시에 create의 인자 안에 phone_number를 넣어줄 수 있죠.

다른 코드도 살펴보고 이와 같이 수정하면 좋겠네요. ㅎㅎ

@shaynekang
Copy link
Author

그리고 FactoryGirl은 다양한 헬퍼들이 많으니 살펴보면 큰 도움이 될 겁니다.
찾아보니 이 아티클이 가장 짧고 유익한 것 같네요. ㅎㅎ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant