2013-05-20 3 views
1

Я начал использовать драгоценный камень изготовления с RSpec и в целом имел большой успех. Однако, похоже, я не могу заставить фабрикуцию работать.Изготовление драгоценного камня с ассоциациями неопределенный метод ошибка

Я использую рубин 1.9.3, Rails 3.2.12, RSpec 2.13.0 и 2.7.0 Изготовление

Модели

class RedistributionSale < ActiveRecord::Base 

    belongs_to :account 
    belongs_to :customer 
    has_many :red_sale_itemisations, :dependent => :destroy 
    has_many :materials, :through => :red_sale_itemisations 


class RedSaleItemisation < ActiveRecord::Base 
    belongs_to :redistribution_sale 
    belongs_to :material 

переработчиков

Fabricator(:redistribution_sale) do 
    invoice_number { sequence(:invoice_number) { |i| i } } 
    status "Sales Receipt" 
end 

Fabricator(:red_sale_itemisation) do 
    quantity 1 
    material_id 1 
    redistribution_sale_id 1 
end 

На данный момент Я могу изготовить любую из этих двух моделей самостоятельно. Но я хочу, чтобы построить их в то же самое время, чтобы проверить все код модели

Я следующий тест

it "returns correct unit prices with" do 

    material_1 = Fabricate(:material, l1price: 7.7, l2price: 8.8, discount: false) 

    redistribution_sale = Fabricate(:redistribution_sale,) do 
    red_sale_itemisations { Fabricate(:red_sale_itemisation, material_id: material_1.id, quantity: 2) } 
    end 
    expect(redistribution_sale.total_value).to eq 17.6 

end 

Однако я получаю следующую ошибку

Failures: 

    1) RedistributionSale calculated fields returns correct unit prices with 
    Failure/Error: redistribution_sale = Fabricate(:redistribution_sale) do 
    NoMethodError: 
     undefined method `each' for #<RedSaleItemisation:0x00000008308d58> 
    # ./spec/models/redistribution_sale_spec.rb:87:in `block (3 levels) in <top (required)>' 

Является ли это то, что было замечено раньше, или я делаю что-то ужасно неправильно?

Michael

ответ

2

Это ошибка в изготовлении, я думаю. Вы можете пропустить эту ошибку на данный момент, обернув содержимое массива red_sale_itemisations, например:

it "returns correct unit prices with" do 

    material_1 = Fabricate(:material, l1price: 7.7, l2price: 8.8, discount: false) 

    redistribution_sale = Fabricate(:redistribution_sale,) do 
    red_sale_itemisations { [Fabricate(:red_sale_itemisation, material_id: material_1.id, quantity: 2)] } 
    end 
    expect(redistribution_sale.total_value).to eq 17.6 

end 
+0

Отлично, обработано. Я добавил это в Github как проблему –