2012-12-05 57 views
0

我想在一個非常簡單的CRUD Rails 3.2.8應用程序中學習Rspec。我遵循邁克爾哈特爾的例子的一般模式,並且在外面部分地用黃瓜取得了適度的成功。現在我想測試一個Twilio SMS功能,並且似乎無法到達第一個基地,主要是因爲我沒有提出正確的問題,所以我希望在這裏糾正並重新走上正軌。 我的應用程序有兩種模型,商品和價格,他們在我的黃瓜測試中互相交流,所以它出現了。我知道,就像黃瓜一樣,我需要一個物體開始測試它的相互作用。在我的價格控制,我看到,我可以得到商品的價格與低於我的價格#創建方法:Rspec,FactoryGirl找不到ActiveRecord方法

@price = @commodity.prices.build(params[:price]) 

我最終要生成一個工廠,將有許多的價格對於一個給定的商品。但我想先到達基地。繼其自述thoughtbot的例子我試圖在軌控制檯以下:

FactoryGirl.create(:commodity) do |price| 
    Commodity.prices.build(attributes_for(:price)) 
end 

結果是:NoMethodError:未定義的方法`價格爲# 嗯,我一定不能瞭解或者Rspec的或工廠女孩。這是我的基本factories.rb:

FactoryGirl.define do 
    factory :commodity do 
    name "corn" 
    end 

    sequence :price do |n| 
    price 
    date { Time.now } 
    end 
end 

這裏是我的兩個型號:

class Commodity < ActiveRecord::Base 
    attr_accessible :description, :name 
    has_many :prices 
end 

MOST_RECENT = 5 
class Price < ActiveRecord::Base 
    attr_accessible :buyer, :date, :price, :quality, :commodity_id 
    scope :most_recent, lambda { order("id desc").limit(MOST_RECENT) } 
    belongs_to :commodity 
end 

我試圖瞭解這是這樣做只是在Rails的控制檯,但是當我運行rspec的錯誤也出現以及。但爲什麼FactoryGirl或Rspec似乎沒有使用我用Active Record獲得的價格方法?顯然,我不理解的東西,或者我會在Stack上找到答案,thanx,sam

回答

1

在您的FactoryGirl.create中有幾個問題。首先,塊參數應該是commodity,而不是pricecreate將創建的對象傳遞到塊中。其次,你試圖在Commodity類上運行prices。在您的對象關係中,prices是與特定實例關聯的訪問者。沒有Commodity#prices方法,但是任何給定的Commodity實例都將有prices。你可以像這樣使用build,但我認爲規範的方法是使用移位運算符來添加Price

把這個一起讓你:

FactoryGirl.create(:commodity) do |commodity| 
    commodity.prices << FactoryGirl.create(:price, commodity: commodity) 
end 

我不知道你在你的商品的工廠定義sequence做什麼。如果您試圖確保商品是默認創建的商品(不添加上述商品),請查看http://icelab.com.au/articles/factorygirl-and-has-many-associations/的一些提示。

+0

是的,謝謝!我需要六個價格來測試模型中的範圍,並使它們順序地幫助我編寫測試。 – sam452

相關問題