Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 工厂-序列为回退的字段_Ruby_Rspec2_Factory Bot - Fatal编程技术网

Ruby 工厂-序列为回退的字段

Ruby 工厂-序列为回退的字段,ruby,rspec2,factory-bot,Ruby,Rspec2,Factory Bot,问题:如何对一个字段同时使用序列和瞬态属性 背景:我有一个工厂,它有一个名字。该名称按顺序排列,以保持其唯一性。然而,在少数规格中,我需要它设置我选择的名称,以便我可以预测它的预期。这不是Rails项目 在我的脑海中,它看起来像name{attribute_from_create|u call|FactoryGirl.generate:name}。但是我不知道如何获得我给create方法的属性 工厂: FactoryGirl.define do sequence :name do |n|

问题:如何对一个字段同时使用序列和瞬态属性

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

在我的脑海中,它看起来像
name{attribute_from_create|u 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

factory的用法:
FactoryGirl.create:historical_bridge,名称:'bridge from'+Time.now.to_s

您可以使用FactoryGirl创建具有序列的属性散列,然后合并对该散列所做的任何更改:

new_name = 'Bridge from '+Time.now.to_s
attr = FactoryGirl.attributes_for(:historical_bridge).merge(:name => new_name)
然后你可以做一些事情,比如用这些自定义属性创建一个对象:

HistoricalBridge.create(attr)

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

let(:bridge) { create :historical_bridge }

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

最后,factory_girl不是快速规范的最佳方法,但它超出了当前的范围