我正在尝试在一个非常简单的 CRUD Rails 3.2.8 应用程序中学习 Rspec。我遵循迈克尔·哈特尔(Michael Hartl)示例的一般模式,并且在外用黄瓜方面取得了一定的成功。现在我想测试 Twilio SMS 功能,但似乎无法进入第一垒,主要是因为我没有问正确的问题,所以我希望在这里得到纠正并回到正轨。我的应用程序有两个模型,商品和价格,它们在我的黄瓜测试中相互交互,所以它出现了。我知道,就像在黄瓜中一样,我需要一个对象来开始测试它的交互。在我的价格控制器中,我看到我可以在我的价格#create 方法中使用以下内容获取商品的价格:
@price = @commodity.prices.build(params[:price])
我最终想创建一个工厂,对给定的商品有很多价格。但我想先到基地。按照他们自述文件中的thinkbot示例,我正在rails控制台中尝试以下操作:
FactoryGirl.create(:commodity) do |price|
Commodity.prices.build(attributes_for(:price))
end
结果是: NoMethodError: undefined method `prices' for # 嗯,我一定不理解 Rspec 或 Factory Girl。这是我的基本工厂.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 上找到答案