Factory Girl(Bot) create vs build vs build_stubbed

Factory Girl(Bot) create vs build vs build_stubbed

Ako ste novi u pisanju RSpec testova u Rails-u pomoću FactoriGirl (bot), možete se zapitati koja je razlika između create , build i build_stubbed . U ovom članku ćemo se potruditi da vam pomognemo da ih bolje razumete.

Recimo da testiramo valjano stvaranje profila:

FactoryBot.define do
  factory :profile do
    user
    sequence(:name) { |n| "Name#{n}" }
  end
end

describe Profile, type: :model do
  it 'creates valid profile' do
    expect(FactoryBot.create(:profile)).to be_valid 
  end
end

FactoryBot.create(:profile) kreiraće objekt profila i sve asocijacije za njega. Svi će se čuvati u bazi podataka. Takođe će pokrenuti validaciju modela i baze podataka . Primer performansi testa sa kreiranjem je:

alt

Napomena: after(:build) i after(:create) pozvaće se nakon čuvanja fabrike. Takođe, before(:create) će biti pozvano pre nego što se fabrika sačuva.

S druge strane, FactoryBot.build(:profile) neće sačuvati objekat, ali će i dalje upućivati zahteve bazi podataka ako fabrika ima asocijacije. Pokrenuće validaciju samo za povezane objekte . Primer performansi testa sa build-om je:
alt

Napomena: after(:build) biće pozvano nakon što se fabrika izgradi.

FactoryBot.build_stubbed(:profile) uopšte ne poziva bazu podataka. Stvara i dodeljuje atribute objektu kako bi se ponašao kao instancirani objekat. Pruža lažni ID i created_at . Asocijacije, ako ih ima, kreiraće se i putem build_stubbed. Neće pokrenuti nikakve validacije. Primer performansi testa sa build_stubbed je:

alt

Napomena: pozvaće se after(:stub) nakon što se fabrički prekine putem buildstubbed.

Imajte na umu da je ovo bio vrlo jednostavan test primer. Očekuju se bolji rezultati performansi sa složenijim test paketima.

Hvala vam što ste pročitali ovaj članak. Nadamo se da vam je pomogao da bolje razumete razlike između načina instanciranja objekata prilikom testiranja sa FactoriBot.

Ako vam se svideo ovaj članak, pretplatite se na naš bilten za više sadržaja o Rails-u!

Zanimaju vas slične teme? Obavezno proverite naše mišljenje o Rspec let vs before . Takođe, ako ste potpuno novi u RSpec-u, imamo vodič za njegovo postavljanje .