2016-03-27 26 views
0

Yinelenen şirketlerin oluşturulmadığından emin olmak için bir özellik oluşturmaya çalışıyorum. Aşağıdaki spesifikasyonları kullandığım zaman şirket uygun şekilde atanır, ancak fabrika hala 3 şirket oluşturur. Bu istenen davranış değildir.Raylar 4 rspec 3 doğrulamadan önce test

Onaylamadan önce geri arama kriterlerini karşılamak için bu özelliği nasıl ayarlayabilirim?

Spec

describe 'before validation' do 
    it 'prevents duplicate companies' do 
     company = create(:company) 
     job1 = create(:job, company: company) 
     job2 = create(:job, company: company) 

     binding.pry 
    end 
    end 

Modeli

class Job < ActiveRecord::Base 
    ... 

    before_validation :find_company 

    ... 

    private 

    ... 

    def find_company 
    existing_company = Company.where(email: company.email) if company 
    self.company = existing_company.first if existing_company.count > 0 
    end 
end 

Fabrika

FactoryGirl.define do 
    factory :job do 
    category 
    company 
    title { FFaker::Company.position } 
    location { "#{FFaker::Address.city}, #{FFaker::AddressUS.state}" } 
    language_list { [FFaker::Lorem.word] } 
    short_description { FFaker::Lorem.sentence } 
    description { FFaker::HTMLIpsum.body } 
    application_process { "Please email #{FFaker::Internet.email} about the position." } 
    end 
end 

cevap

0

kullanın bu işi yapmak için geçici blok ...

FactoryGirl.define do 
    factory :job do 
    category 
    transient do 
     company 
    end 
    title { FFaker::Company.position } 
    location { "#{FFaker::Address.city}, #{FFaker::AddressUS.state}" } 
    language_list { [FFaker::Lorem.word] } 
    short_description { FFaker::Lorem.sentence } 
    description { FFaker::HTMLIpsum.body } 
    application_process { "Please email #{FFaker::Internet.email} about the position." } 
    end 
end 

Spec

describe 'before validation' do 
    it 'prevents duplicate companies' do 
     company = create(:company) 
     job1 = create(:job, company: company) 
     job2 = create(:job, company: company) 
     expect(Company.all.count).to eq(1) 
    end 
    end