2012-12-05 7 views
0

매우 간단한 CRUD Rails 3.2.8 앱에서 Rspec을 배우려고합니다. 나는 Michael Hartl의 예를 일반적인 패턴으로 따르고 있고 부분적으로 바깥쪽에 대해서는 오이가 적당히 성공했습니다. 이제 Twilio SMS 기능을 테스트하고 싶습니다. 우선 기본적인 질문을하지 않았기 때문에 1 루수로 보일 수 없으므로 여기에서 문제를 해결하고 정상적으로 돌아 오기를 기대합니다. 내 응용 프로그램에는 두 가지 모델, 상품 및 가격이 있으며 내 오이 테스트에서 서로 상호 작용하므로 나타납니다. 저는 오이처럼, 그것의 상호 작용을 테스트하기 시작하는 객체가 필요하다는 것을 알고 있습니다. 내 가격 컨트롤러, 나는 #이 방법을 만들어 내 가격 아래로 상품의 가격을 얻을 수 있습니다 참조 :Rspec, FactoryGirl이 ActiveRecord 메소드를 찾을 수 없습니다.

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

내가 궁극적으로 특정 상품에 대한 많은 가격을해야합니다 공장을 생성합니다. 그러나 나는 먼저 기초를 다뤄야한다. 자신의 추가 정보에 thoughtbot의 예에 따라 내가 레일 콘솔에서 다음을 시도 해요 :

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

결과는 다음과 같습니다 NoMethodError : # 흠에 대한 정의되지 않은 메서드`가격이 '나는 RSpec에 또는 공장 소녀 하나를 이해하지 않아야합니다. 여기

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

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

내 두 모델은 다음과 같습니다 : 여기 내 기본 factories.rb입니다

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 

이를 이해하는 나의 시도는 단순히 레일 콘솔 만에 그것을 할 것입니다 내가 RSpec을 실행할 때 오류가 나타납니다 게다가. 하지만 FactoryGirl 또는 Rspec이 액티브 레코드로 얻는 가격 방법을 사용하지 않는 이유는 무엇입니까? 분명히, 나는 무언가를 이해하지 못하거나 스택, 고맙습니다, 샘에 대한 대답을 발견했을 것입니다.

답변

1

FactoryGirl.create에는 몇 가지 문제점이 있습니다. 먼저 블록 인수는 이 아니라 commodity이어야합니다. create은 생성 된 객체를 블록에 전달합니다. 둘째, 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

예, 감사합니다. 모델에 범위를 테스트하고 테스트를 작성하는 데 도움이되는 순차적 모델을 만들기 위해서는 6 가지 가격이 필요합니다. – sam452

관련 문제