工厂 - 具有序列作为后备的字段

时间:2013-02-08 17:45:40

标签: ruby rspec2 factory-bot

问题:如何在一个字段中使用序列和瞬态属性?

背景:我有工厂,有一个名字。名称是序列,以保持其独特性。然而,在少数规格中我需要它设置我选择的名称,以便我可以预期它。这不是Rails项目。

在我看来,它看起来像name {attribute_from_create_call||FactoryGirl.generate :name}。但我不知道如何获得我赋予create方法的属性

厂:

FactoryGirl.define do
  sequence :name do |n|
    'Testing Bridge '+n.to_s
  end

  factory :historical_bridge do
    name {FactoryGirl.generate :name}
  end
end

工厂用法:FactoryGirl.create :historical_bridge, name: 'Bridge from '+Time.now.to_s

2 个答案:

答案 0 :(得分:1)

您可以使用FactoryGirl创建包含序列的属性哈希值,然后合并到您想要的哈希值的任何更改中:

new_name = 'Bridge from '+Time.now.to_s
attr = FactoryGirl.attributes_for(:historical_bridge).merge(:name => new_name)

然后你可以做一些事情,比如用这些自定义属性创建一个对象:

HistoricalBridge.create(attr)

答案 1 :(得分:0)

我认为您不应该使用预定义的名称而不是序列,但请检查以下内容:

let(:bridge) { create :historical_bridge }

it { HistoricalBridge.something.name.should == bridge.name }