Factory Girl 및 Faker 사용

2378 단어
(1) Rails는 기본적으로 펌웨어라는 예제 데이터를 신속하게 생성하는 도구를 제공합니다.펌웨어는 예제 데이터를 생성하는 데 사용할 수 있는 YAML 형식의 파일입니다.예:
contacts.yml
aaron:
    firstname: "Aaron"
    lastname: "Sumner"
    email: "[email protected]"

테스트에서 contacts(:aaron)를 인용하여 연락처를 얻을 수 있으며 모든 속성에 값이 붙지만 펌웨어에 단점이 있습니다.
펌웨어의 데이터는 파괴되기 쉽다
Rails는 테스트 라이브러리에 펌웨어를 저장할 때 데이터 검증을 생략합니다.
(2) 예비 부품 Factory Girl의 사용, 예:
spec/factories/contacts.rb
FactoryGirl.define do
    factory :contact do
        firstname "John"
        lastname "Doe"
        sequence(:email) { |n| "johndoe#{n}@example.com" }
    end
end

테스트에서 Factory Girl을 사용합니다.create(:contact)(데이터베이스 저장) FactoryGirl.build (:contact) (데이터베이스 저장하지 않음) 사용, sequence는 n의 증가를 보장합니다. 메일박스가 다를 때마다 유일한 검증이 있을 때 사용할 수 있습니다.
동시에 예비 부품 Factory Girl도 나름대로 문제가 있어요.
테스트를 늦출 거예요.
모델 연관이 복잡할 때, 예비 부품은 유지 보수하기 어렵다
(3) Factory Girl 3.0부터 일부 구성만 하면 예비 구성 요소가 호출될 때 앞의 Factory Girl을 생략할 수 있습니다. 구성은 다음과 같습니다.
spec/spec_helper.rb
RSpec.configure do |config|
    config.include FactoryGirl::Syntax::Methods
end

(4) 예비 부품의 관련은 association 방법을 사용할 수 있습니다. 이것은 Factory Girl에게 전화에 속하는 연락처를build 방법(또는create 방법)에 전달하지 않으면 새로운 연락처를 만듭니다.
(5) 예비 위젯의 계승, 같은 속성은 맨 위 factory에 쓸 수 있고, 다른 속성은 중첩된 factory로 구분됩니다. 예를 들어
FactoryGirl.define do
    factory :phone do
        association :contact
        phone { '123-555-1234' }
        factory :home_phone do
            phone_type 'home'
        end
        factory :work_phone do
            phone_type 'work'
        end
    end
end

(6) faker를 사용하여 다음과 같은 실제 데이터를 생성합니다.
Faker::PhoneNumber.phone_number
Faker::Name.first_name
Faker::Name.last_name
Faker::Internet.email
(7) FactoryGirl에도 after 리셋 함수가 있습니다. 예:
FactoryGirl.define do
    firstname { Faker::Name.first_name }
    lastname { Faker::Name.last_name }
    email { Faker::Internet.email }
    after(:build) do |contact|
        [:home_phone, :work_phone, :mobile_phone].each do |phone|
            contact.phones << FactoryGirl.build(:phone,
                phone_type: phone, contact: contact)
        end
    end
end

(8) 테스트가 느려지면 예비 부품의 연관성을 제거하고 필요한 데이터를 수동으로 추가하거나 순수 Ruby 객체로 데이터를 생성하는 것이 좋다

좋은 웹페이지 즐겨찾기