Everyday-rails-rspec - 예비 부품 및 펌웨어

2463 단어
펌웨어: Rails는 기본적으로 샘플 데이터를 신속하게 생성하는 도구를 제공하며 이를 펌웨어라고 합니다.펌웨어는yaml 형식의 파일로 예시 데이터를 생성할 수 있습니다.예를 들어 다음은 Contact 모델의 펌웨어입니다.
# contact.yml
aaron: 
  firstname: "Aaron" 
  lastname: "Sumner" 
  email: "[email protected]"
john: 
  firstname: "John" 
  lastname: "Doe" 
  email: "[email protected]"

테스트에서, 우리는contact (:aaron) 를 사용하면 연락처를 얻을 수 있습니다.
펌웨어에 두 가지 문제가 있습니다. 저는 극력 피합니다.
  • 부품의 데이터는 파괴되기 쉽다(이것은 테스트 작성과 응용 코드와 같은 시간을 들여 테스트 데이터를 유지해야 한다는 것을 의미한다).
  • Rails는 펌웨어의 데이터를 테스트 데이터베이스에 저장할 때 Active Record 레이어를 건너뜁니다.이것은 모델의 데이터 검증과 같은 많은 중요한 조작이 무시된다는 것을 의미한다.이러면 안 돼.

  • 예비 부품: 간단하고 유연하게 테스트 데이터를 만듭니다.Factory Girl 이 도구는 부품처럼 쉽게 파괴되지 않고 사용하기 편리하며 생성된 테스트 데이터도 믿을 만하다.결점
  • 테스트 속도 감소
  • 응용 프로그램에서 예비 위젯 사용하기


    스펙 폴더에서 만들기 factories/contacts.rb 다음 코드 쓰기
    FactoryGirl.define do
        factory :contact do
            firstname "John"
            lastname "Doe"
            sequence(:email) { |n| "johndoe#{n}@example.com"}
        end
    end
    

    ** sequence는 FactoryGirl 호출할 때마다 n의 값이 +1 * * *
    *** 모델에서 고유성 검증만 있으면 sequence (시퀀스) ***
    테스트 코드:
    require 'rails_helper'
    
    describe Contact do  
      it 'has a valid build' do 
        expect(FactoryGirl.build(:contact)).to be_valid
      end  
      it 'is invalid without a firstname' do
        contact = FactoryGirl.build(:contact, firstname: nil)                       contact.valid?
        expect(contact.errors[:firstname]).to include("can't be blank")  
      end    
    
      it 'is invalid with a duplicate email address' do    
        FactoryGirl.create(:contact, email: '[email protected]')  
        contact = FactoryGirl.build(:contact,email:'[email protected]')
        contact.valid?     
        expect(contact.errors[:email]).to include("has already been taken")
      end
    end
    

    *** FactoryGirl.build의 역할은 메모리에 새로운 테스트 대상을 저장하는 것이다.FactoryGirl.create의 역할은 대상을 응용 테스트 데이터베이스에 영구적으로 저장하는 것이다. ***

    보다 사실적인 가상 데이터 생성 - Faker


    여기서 우리는 가상 데이터 생성 도구인 Faker를 소개합니다.Faker를 사용한 후에 우리의 코드는 아래의 견본지가 되었다.그것은 더욱 진실해 보이는 테스트 데이터를 생성할 것이다
    FactoryGirl.define do
        factory :contact do
           firstname { Faker::Name.first_name } 
           lastname { Faker::Name.last_name } 
           email { Faker::Internet.email }
        end
    end
    

    좋은 웹페이지 즐겨찾기