-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
FactoryGirl을 활용할 때 몇 가지 원칙을 지키면 간결하고 명확한 단위테스트를 작성할 수 있습니다.
- DB에 저장할 필요가 없다면
#build를, DB에 저장할 필요가 있다면#create를 활용한다. - 넣어줄 값이 많지 않다면
#build,#create에서 한꺼번에 넣어준다. - 언제든지 필요한 값은 spec/factories.rb 등에서 디폴트로 설정한다.
- 유니크한 값이 필요하다면
sequence를 활용해 매 번 다른 값을 생성한다. - 테스트에 필요한 값은 명시적으로 할당해준다.
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 = "tom@donutworks.com"
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를 넣어줄 수 있죠.
다른 코드도 살펴보고 이와 같이 수정하면 좋겠네요. ㅎㅎ
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels