rails 5.0.4
ruby 2.5.1
rspec 3.7
capybara
Мне нужна помощь по созданию заводов и их использованию в моих спецификациях. Я продолжаю сталкиваться с одними и теми же проблемами, и когда мне кажется, что я это выяснил, я снова сталкиваюсь с той же проблемой.
Модели:
customer.rb
has many jobs
job.rb
belongs to customer
has_many hours
hour.rb
belongs to job
Фабрики:
#customer.rb
FactoryGirl.define do
factory :customer, :class => Customer do
name "abc construction"
contact "John"
street "101 Main street"
city "Anywhere"
state "NY"
zip "12345"
phone "123-555-4567"
end
end
#job.rb
FactoryGirl.define do
factory :job, :class => Job do
customer_id
street "55 first str"
city "Anywhere"
state "NY"
zip "12345"
phone "123-456-7890"
created_at Time.now
updated_at Time.now
description "Test Job"
name "house repairs"
end
end
# hour.rb
FactoryGirl.define do
factory :hour, :class => Hour do
job_id
date_worked Date.today
hours 1
description "test"
end
end
Спецификация функции часов
# hours_spec.rb
context "edit form" do
before(:each) do
customer=FactoryGirl.create(:customer)
job=FactoryGirl.create(:job, :customer_id => customer.id)
hours=FactoryGirl.create(:hour, :job_id => job.id)
visit edit_hour_path(:id => hours.id)
end
scenario "update messages shows" do
within('form') do
fill_in 'hour_description', with: 'testing'
end
click_button("Update Hours")
expect(page).to have_content("You updated the record")
end
end
Запуск тестов спецификации часов
rspec spec/features/hours_spec.rb
...
.....Capybara starting Puma...
* Version 3.9.1 , codename: Private Caller
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:44465
.DEPRECATED: Capybara::Helpers::normalize_whitespace is deprecated, please update your driver
.F
Failures:
1) Hours edit form update messages shows
Failure/Error: job=FactoryGirl.create(:job, :customer_id => customer.id)
ArgumentError:
Trait not registered: customer_id
# ./spec/features/hours_spec.rb:58:in `block (3 levels) in <top (required)>'
Finished in 0.86646 seconds (files took 1.24 seconds to load)
8 examples, 1 failure
Если я изменю фабрику заданий на значение customer_id, я получаю похожую ошибку, но счисло (488). возможно, что он видит как customer_id?
FactoryGirl.define do
factory :job, :class => Job do
customer_id FactoryGirl.create(:customer)
...
end
rspec spec/features/hours_spec.rb
Failures:
1) Hours edit form update messages shows
Failure/Error: job=FactoryGirl.create(:job, :customer_id => customer.id)
ArgumentError:
Trait not registered: 488
# ./spec/features/hours_spec.rb:58:in `block (3 levels) in <top (required)>'
Что я делаю не так? Как правильно это сделать?
Спасибо за любую помощь!