Faker를 사용하는 것은 안티 패턴입니다.

제 생각에는 Faker와 무작위로 생성된 데이터는 일반적으로 테스트에서 안티 패턴입니다.

우선, Faker 테스트는 비결정적입니다. 실행 - 충돌, 다시 실행 - 통과. 이러한 불안정한 테스트는 디버그하기가 매우 어렵고 CI에서 성가신 일입니다.

둘째, 무작위 데이터는 테스트 속도를 저하시킵니다. 특히 공장에서: Faker에서 sequence { ... }로 전환하면 테스트 스위트가 12% 가속화되는 프로젝트에 참여했습니다.

세 번째로 Faker의 남용은 테스트에서 코드 중복으로 이어집니다. 예를 들어 사용자의 이니셜을 반환하는 테스트 메서드를 살펴보세요.

it "returns initials"
  user = described_class.new(name: Faker::Name.name)
  expected = user.name
    .upcase
    .split(" ")
    .map { |part| part[0] }
    .join("")

  expect(user.initials).to eq(expected)
end


이것은 이해할 수 없고 혼란스러운 테스트입니다. #initials 메서드가 변경되면 변경 사항이 테스트에서도 복제되어야 합니다. 더 나은 방법은 다음과 같이 작성하는 것입니다.

it "returns initials"
  user = described_class.new(name: "Daniel Craig Jones")

  expect(user.initials).to eq("DCJ")
end


테스트 도구 모음에서 Faker를 자세히 살펴볼 것을 제안합니다. 정말 필요한가요?

이 주제에 대한 추가 정보:
  • Stop using Faker and random data in the test fixtures
  • FactoryGirl Tips and Tricks
  • You Shouldn’t Use Faker (or other test randomization libraries)
  • 좋은 웹페이지 즐겨찾기