0
我想運行一個簡單的測試,檢查該對象可以與它的關聯建FactoryGirl並與協會
class Portfolio < ActiveRecord::Base
has_many :portfolio_sectors
has_many :sectors, through: :portfolio_sectors
has_many :portfolio_images, dependent: :destroy
accepts_nested_attributes_for :portfolio_images, allow_destroy: true
end
class Sector < ActiveRecord::Base
has_many :portfolio_sectors
has_many :portfolios, through: :portfolio_sectors
end
我的測試看起來像這樣
RSpec.describe Portfolio, type: :model do
it 'should have a valid Factory' do
expect(FactoryGirl.build(:portfolio)).to be_valid
end
end
投資組合的出廠檢測的has_many看起來像
include ActionDispatch::TestProcess
FactoryGirl.define do
factory :portfolio do |p|
p.title 'Test portfolio title'
p.overview 'test sentence for the overview section of portfolio'
p.url 'http://bbc.co.uk'
p.after(:create) do |portfolio|
portfolio.sectors = FactoryGirl.create(:associated_sector, portfolio: portfolio)
end
p.after(:create) do |portfolio|
portfolio.portfolio_images = [FactoryGirl.build(:portfolio_image, portfolio: portfolio)]
end
end
end
因此,當這個測試運行我得到
Failure/Error: expect(FactoryGirl.build(:portfolio)).to be_valid
expected #<Portfolio id: nil,
overview: "test sentence for the overview section of portfoli...",
title: "Test portfolio title",
sector_id: nil,
url: "http://bbc.co.uk",
created_at: nil,
updated_at: nil>
to be valid, but got errors: Sectors Choose At Least 1 Sector
我可以看到爲什麼沒有扇區ID存在。
如何在創建投資組合時通過部門ID?
或者我不正確地接近?
感謝
謝謝您的回答,雖然它類似於我有什麼(除了創建之後組合,十分感謝那個),我仍然得到一個錯誤'但是有錯誤:部門選擇在最少1個扇區「。例如,當用戶創建一個投資組合時,他們將從下拉列表中選擇數據庫中的部門列表,這是否有所作爲? – Richlewis
嘗試在(:create)'回調之後的'end'中添加'portfolio.save!'。這聽起來像變化不傳播。另外,檢查前的'portfolio.reload'可能會有所幫助。 – mudasobwa
不幸的是,這並沒有幫助,也沒有重新加載..要以不同的角度來看待這個問題,那麼,你會如何編寫這個測試?也許我可以從你那裏學習一些東西,也許改變我的方法,謝謝 – Richlewis