首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有关联的制造gem未定义方法错误

具有关联的制造gem未定义方法错误
EN

Stack Overflow用户
提问于 2013-05-20 14:48:01
回答 1查看 1.5K关注 0票数 1

我已经开始和RSpec一起使用制造gem,总的来说取得了很大的成功。然而,我似乎不能让这种联想造假起作用。

我使用的是Ruby1.9.3、Rails 3.2.12、RSPec 2.13.0和制造2.7.0

模型

代码语言:javascript
复制
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

制造者

代码语言:javascript
复制
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

在这一点上,我可以独立地制造这两个模型中的任何一个。但是我想同时构建它们来测试所有的模型代码

我有以下测试

代码语言:javascript
复制
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

但是,我得到以下错误

代码语言:javascript
复制
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)>'

这是以前见过的吗,还是我做错了什么?

迈克尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 21:21:46

我认为这是一个虚构的bug。现在,您可以通过将red_sale_itemisations的内容包装在一个数组中来克服这个错误,如下所示:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16644048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档