0

非常にシンプルなCRUDRails3.2.8アプリでRspecを学習しようとしています。私はマイケル・ハートルの例の一般的なパターンに従っており、部分的に外側のキュウリで適度に成功しています。今、Twilio SMS機能をテストしたいのですが、主に正しい質問をしていないために一塁に到達できないようです。そのため、ここで修正して軌道に戻ることを期待しています。私のアプリには商品と価格の2つのモデルがあり、キュウリのテストで相互作用するため、表示されます。きゅうりのように、相互作用のテストを開始するためのオブジェクトが必要であることを私は知っています。価格コントローラーでは、prices#createメソッドで以下を使用して商品の価格を取得できることがわかります。

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

私は最終的に、特定の商品に対して多くの価格を持つ工場を作りたいと思っています。しかし、私は最初に基地に行きたいです。Readmeでのthoughtbotの例に従って、Railsコンソールで次のことを試みています。

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

結果は次のとおりです。NoMethodError:#うーんの未定義のメソッド `prices'、RspecまたはFactoryGirlのどちらも理解してはいけません。これが私の基本的なfactories.rbです:

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

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

これが私の2つのモデルです。

 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で答えを見つけたでしょう

4

1 に答える 1

1

あなたFactoryGirl.createにはいくつかの問題があります。まず、ブロック引数は。commodityではなく、である必要がありpriceます。 create作成されたオブジェクトをブロックに渡します。prices次に、Commodityクラスで実行しようとしています。オブジェクト関係で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でいくつかのヒントを確認してください。 -アソシエーション/

于 2012-12-05T14:59:36.127 に答える