繁体   English   中英

Rspec,factory_girl - 使用has_many模型测试创建动作

[英]Rspec, factory_girl - Test create action with model with has_many

我正在尝试为动作创建一个rspec测试。 控制器是OrderController。 订单模型包含许多订单项。 我不知道怎么做这个电话:

post:create,order:FactoryGirl.build(:order).attributes

但这失败了,因为我的验证说:订单应该至少包含一个订单项。 我认为我应该创建一个包含订单项的订单。

非常感谢。

您可以在factory_girl中定义关联。

factory :order_line do
    #some attributes

    order
end

factory :order do
    #some attributes        

    #the line's count you want to create
    ignore do
      lines_count 5
    end

    after(:create) do |order, evaluator|
      FactoryGirl.create_list(:order_line, evaluator.lines_count, order: order)
    end
end

因此,当您使用factory_girl创建订单时,您也将构建一些行。

您可以使用FactoryGirl构建关联对象。 不过,您有两种选择:

1.)手动/显式方法 - 在这里你将line_items传递给工厂调用:

FactoryGirl.build(:order, line_items: [build(:line_item), build(:line_item)]

2.)自动方法 - 您将工厂配置为始终包含至少一个行项目:

在您的工厂文件中:

factory :order do
  # attrs

  after :build do |order, ev|
    order.line_items << build(:line_item)
  end 
end

这将用于构建一个具有默认属性的默认line_item。 如果您想拥有更多特定属性,则必须回退使用第一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM