0
我知道這是一個基本的問題,但有太多令人困惑,過時的&矛盾的信息在那裏......我設法爭奪我的大腦......如何最好地訪問父模型從一個孩子的控制器規格...使用FactoryGirl?RSpec:controller_specs資源與關係
它可能是部分與使用來自子模型的(to_params)中父模型(user.name)的值有關。這對我來說工作得很好。我只是有一個很難測試它:
少女模特兒:
User
:name - string - unique
:email - string - unique
has_many :ballots
Ballot
belongs_to :user
has_many :items
def to_param #
"#{id} #{user.name}".parameterize
end
factories.rb:
FactoryGirl.define do
sequence :email do |n|
"person#{n}@fake_mail.com"
end
sequence :name do |n|
"Person#{n}"
end
factory :user do
name "Joe Schmo"
email
end
factory :sequenced_user, :parent => :user do
name
email
end
factory :ballot do
sequenced_user
end
ballots_controller_spec.rb:
describe BallotsController do
def valid_attributes
FactoryGirl.attributes_for(:ballot)
end
describe "GET show" do
it "assigns the requested ballot as @ballot" do
ballot = Ballot.create! valid_attributes
get :show, {:id => ballot.to_param}, valid_session
assigns(:ballot).should eq(ballot)
end
end
...
end
規格故障:
1) BallotsController GET show assigns the requested ballot as @ballot
Failure/Error: get :show, {:id => ballot.to_param}, valid_session
NoMethodError:
undefined method `name' for nil:NilClass
# ./app/models/ballot.rb:5:in `to_param'
# ./spec/controllers/ballots_controller_spec.rb:53:in `block (3 levels) in <top (required)>'
...
問題似乎是運行規範無法訪問投票所關聯的用戶的name
。但是,投票工廠裏有一個關聯的用戶!?!那麼,使用FactoryGirl產生這種關係的正確方法是什麼?
可以爲您發佈一行:'./app/models/ballot.rb: 5'和周圍的環境? (功能'#to_param') – farnoy 2012-02-17 21:33:09
它在那裏。基本上'Ballot'類包含'belongs_to:user'和'to_param'(你可以在上面看到)。 – Meltemi 2012-02-18 00:13:47