gpt4 book ai didi

ruby-on-rails - FactoryGirl::AttributeDefinitionError:属性已定义:用户

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:53 24 4
gpt4 key购买 nike

我创建了工厂客户和契约(Contract)。我运行测试,但显示错误

FactoryGirl.define do
factory :client, class: User do
role 'client'
first_name 'John'
sequence(:last_name) { |n| "client#{n}" }
sequence(:email) { |n| "client#{n}@example.com" }
# avatar { Rack::Test::UploadedFile.new(File.join(Rails.root, 'public', 'images', '128.jpg')) }
password 'password'
password_confirmation 'password'
end
end

support/controller_macros.rb

module ControllerMacros
def login_client
before do
@client = create(:client)
#@request.env['devise.mapping'] = Devise.mappings[:client]
sign_in @client
end
end
end

FactoryGirl.define do
factory :contract do
sequence(:title) { |n| "translation#{n}" }
amount 150
additional_information 'X' * 500
due_date { 21.days.from_now }

association :user, factory: :client
association :user, factory: :contractor
end
end

我运行测试rspec 规范/controllers/contracts_controller_spec.rb

require 'rails_helper'

describe ContractsController do
login_client
let(:contract) { create(:contract) }

describe 'POST #create' do

context 'with valid attributes' do
it 'redirects to payment page' do
post :create, contract: attributes_for(:contract)
expect(response).to redirect_to payment_new_path
end
end
end
end

错误显示:

Failure/Error: post :create, contract: attributes_for(:contract)
FactoryGirl::AttributeDefinitionError:
Attribute already defined: user

工厂或测试有什么问题?

最佳答案

工厂 :contract 定义了两个名为 user 的属性,这是不允许的。

给它们唯一的(在工厂内)标签,例如:

FactoryGirl.define do
factory :contract do
sequence(:title) { |n| "translation#{n}" }
amount 150
additional_information 'X' * 500
due_date { 21.days.from_now }

association :client, factory: :client
association :contractor, factory: :contractor
end
end

因为它们看起来很合适,所以我选择了与工厂名称相对应的属性名称。这甚至可以通过省略工厂名称来缩短它:

FactoryGirl.define do
factory :contract do
sequence(:title) { |n| "translation#{n}" }
amount 150
additional_information 'X' * 500
due_date { 21.days.from_now }

client
contractor
end
end

(参见 http://www.rubydoc.info/gems/factory_girl/file/GETTING_STARTED.md,“关联”部分:

If the factory name is the same as the association name, the factory name can be left out.

)

关于ruby-on-rails - FactoryGirl::AttributeDefinitionError:属性已定义:用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com