Factorygirl ,我无法表达1对1(has_one)与rspec的联想
Factorygirl , I can't express the association of 1 on 1 (has_one) with rspec
我想在 Decidingscontroller 中测试 #create,Deciding 模型有 undertaking_id 列与 Undertaking 模型相关联,并且有 asking_id 列与 Asking 模型相关联。
所以,我的 factories/decidings.rb 在下面。
factory :deciding do
after(:build) do |deciding|
deciding.asking ||=build(:asking, deciding: deciding)
deciding.undertaking ||=build(:undertaking, deciding: deciding)
end
end
我的 spec/controllers/decidings_controller_spec.rb 在下面。
RSpec.describe DecidingsController, type: :controller do
describe '#create' do
before do
@deciding=build(:deciding)
end
context 'correct_user login' do
before do
login_user(@deciding.asking.user)
end
it 'creates with deciding +1' do
expect{post :create , undertaking_id: @deciding.undertaking_id , asking_id: @deciding.asking_id}.to change(Deciding , :count).by(1)
end
end
end
end
但@deciding 在这种情况下如下。
#<Deciding id: nil, asking_id: nil, undertaking_id: nil, created_at: nil, updated_at: nil>
所以我无法创建测试,因为 undertaking_id 和 asking_id 为零。
为什么 undertaking_id 和 asking_id 为零?请帮我...
无论如何,我的 factories/asking.rb 在下面。
FactoryGirl.define do
factory :asking do
association :user
sequence(:content){|i| "お願いします#{i}"}
end
end
ids 为 nil,因为记录未持久化。当您使用 build
方法时,它不会在数据库中保存记录。如果一条记录没有被保存,它就不能有 ID。请改用 create
方法。
试试这个:
factory :deciding do
after(:build) do |deciding|
deciding.asking ||= create(:asking)
deciding.undertaking ||= create(:undertaking)
end
end
我想在 Decidingscontroller 中测试 #create,Deciding 模型有 undertaking_id 列与 Undertaking 模型相关联,并且有 asking_id 列与 Asking 模型相关联。 所以,我的 factories/decidings.rb 在下面。
factory :deciding do
after(:build) do |deciding|
deciding.asking ||=build(:asking, deciding: deciding)
deciding.undertaking ||=build(:undertaking, deciding: deciding)
end
end
我的 spec/controllers/decidings_controller_spec.rb 在下面。
RSpec.describe DecidingsController, type: :controller do
describe '#create' do
before do
@deciding=build(:deciding)
end
context 'correct_user login' do
before do
login_user(@deciding.asking.user)
end
it 'creates with deciding +1' do
expect{post :create , undertaking_id: @deciding.undertaking_id , asking_id: @deciding.asking_id}.to change(Deciding , :count).by(1)
end
end
end
end
但@deciding 在这种情况下如下。
#<Deciding id: nil, asking_id: nil, undertaking_id: nil, created_at: nil, updated_at: nil>
所以我无法创建测试,因为 undertaking_id 和 asking_id 为零。 为什么 undertaking_id 和 asking_id 为零?请帮我... 无论如何,我的 factories/asking.rb 在下面。
FactoryGirl.define do
factory :asking do
association :user
sequence(:content){|i| "お願いします#{i}"}
end
end
ids 为 nil,因为记录未持久化。当您使用 build
方法时,它不会在数据库中保存记录。如果一条记录没有被保存,它就不能有 ID。请改用 create
方法。
试试这个:
factory :deciding do
after(:build) do |deciding|
deciding.asking ||= create(:asking)
deciding.undertaking ||= create(:undertaking)
end
end