2016-12-20 115 views
1

我使用FactoryGirl寶石創建以下工廠:錯誤與工廠女孩的Rails on Rails的複雜廠5

FactoryGirl.define do 
    conta_origem = FactoryGirl.create(:conta_pessoa_fisica) 
    conta_destino = '' 
    tipos = LogTransacao.tipos.keys 
    params = { conta_origem: conta_origem, conta_destino: conta_destino, tipo: tipos[0] } 
    codigo_transacional = LogTransacaoHelper::Gerador.codigo_alphanumerico(params) 

    factory :log_transacao_carga, class: LogTransacao do 
    codigo_transacional { codigo_transacional } 
    tipo { tipos[0] } 
    estornado { false } 
    valor { 0 } 
    conta_origem_id { conta_origem.id } 
    conta_origem_valor_antes_transacao { conta_origem.saldo } 
    end 
end 

conta.rb 
FactoryGirl.define do 
    factory :conta do 
    nome { Faker::Name.name } 
    saldo { 0 } 
    status { 1 } 

    factory :conta_pessoa_fisica do 
     pessoa_type { 'PessoaFisica' } 
     pessoa_id { FactoryGirl.create(:pessoa_fisica).id } 
    end 
    end 
end 

所以,我發現了以下錯誤:

find': Factory not registered: pessoa_fisica 

當我使用FactoryGirl.create工廠內也沒有發生此問題「:log_transacao_carga」。

conta_origem_id {FactoryGirl.create(:conta_pessoa_fisica).ID}

但是,如果我這樣做,我不能用同一個工廠來填充 conta_origem_valor_antes_transacao。所以,我需要在log_transacao_carga工廠之前創建這個工廠。

請問有人可以幫助我嗎?

回答

0

This problem does no occur when I use the FactoryGirl.create inside of the factory ':log_transacao_carga'.

log_transacao_carga作品,因爲你逝去的類名給它(LogTransacao)。

你做嵌套工廠的任何特定原因與trait?您可以使用FactoryGirl的trait像這樣:

FactoryGirl.define do 
    factory :conta do 
    nome { Faker::Name.name } 
    saldo { 0 } 
    status { 1 } 

    trait :conta_pessoa_fisica do 
     pessoa_type { 'PessoaFisica' } 
     pessoa_id { FactoryGirl.create(:pessoa_fisica).id } 
    end 
    end 
end 

,然後用build(:conta, :conta_pessoa_fisica稱呼它)。通過這種方式,它可以更好地讀取我的內容,並且可以繼承父級工廠屬性並在特定上下文中添加/編輯所需的屬性。

退房FactoryGirl文檔: http://www.rubydoc.info/github/thoughtbot/factory_girl/FactoryGirl/Syntax/Methods

這裏是FactoryGirl的創造者一個很好的介紹視頻:https://thoughtbot.com/upcase/videos/factory-girl

+0

嘿,@Dimitry_N,我會檢查這個特質。我沒有使用它,因爲我一直使用嵌套工廠,並且它一直運行到此刻之前。 我不知道特質,所以我會盡量使用它。謝謝您的幫助。 –