2013-11-23 57 views
0

我有一個Rails 4應用程序與一系列的關聯:職位have_many評論,評論have_one假設。在控制檯完美工廠女孩軌道4協會在控制檯中工作,但不通過黃瓜

FactoryGirl.define do 
    factory :review do 
    association :post, factory: :post 
    ...fields... 

    factory :review_with_assumption do 
     after(:create) do |review| 
     FactoryGirl.create(:assumption, assumable: review) 
     end 
    end 
    end 
end 

以下工作:我已經建立了工廠,假設生成點評

post = FactoryGirl.create(:post) 
rev = FactoryGirl.create(:review_with_assumption, post: post) 
rev.assumption.valid? 
=> true 
post.reviews.first.assumption.valid? 
=> true 

而且所有的領域都正是因爲他們在我廠定義設置 - 爲例如,假設每一個包括6.「得分」然而,當我使用以下步驟黃瓜,創建了審查,但它的假設是不:

Given(/^the post "(.*?)"'s review "(.*?)" has an assumption$/) do |arg1, arg2| 
    post = FactoryGirl.create(:post, name: arg1) 
    rev = FactoryGirl.create(:review_with_assumption, name: arg2, post: post) 
end 
Then(/^I should see the "(.*?)" review assumption's score$/) do |arg2| 
    rev = Review.find_by_name(arg2) 
    page.should have_content rev.assumption.score 
end 

所以我得到LOO錯誤ks如:

And I should see the "Test Rev" review assumption's score 
     undefined method `score' for nil:NilClass (NoMethodError) 

如果我手動輸入所有內容,它正試圖呈現的頁面內容在瀏覽器中完美呈現。爲什麼它不能通過工廠女孩和黃瓜?

回答

0

您沒有名爲「arg1」的「review」記錄。相反,根據您的定義,名稱爲「arg1」的記錄是post記錄。

+0

我很抱歉 - 這些變量名稱令人困惑,並得到糾正。它實際上是用來創建Review記錄的'arg2'名稱。 – thusson

+0

@ thusson,這很好:)但是,仍然是,參數問題。如果這是您的確切代碼,則您在第二個塊中使用'arg1'作爲rev = Review.find_by_name(arg1)'。 '然後'是另一種情況,arg1不住在這裏,所以你不能使用它,當然rev是無效的。解決的辦法是將'arg1'定義爲一個實例變量'@ arg1',以便稍後在此測試的其他塊中訪問它。 –

+0

是的,你是對的 - 再次糾正,更多道歉:)但問題是測試發現審查很好,但它沒有與它相關的假設。感謝您的幫助,對於snafus感到抱歉。 – thusson