创建多个工厂以测试订购

时间:2014-11-14 01:42:03

标签: ruby-on-rails testing rspec factory-bot

我正在尝试测试工厂的顺序。 (1)我需要帮助编写一个测试,测试工厂订购是否正确。所以我假设我必须创建工厂然后改变结果然后对它们进行排序。

此外,(2)我想知道是否有一种DRYer方法在工厂中创建多个项目。

规格/模型/ item_spec.rb

require 'rails_helper'

RSpec.describe Item, :type => :model do

  let(:item) { FactoryGirl.create(:item) }
  let(:item2) { FactoryGirl.create(:item) }
  let(:item3) { FactoryGirl.create(:item) }

  it "should sort the items in order" do
    # tests order
  end
end

规格/工厂/ items.rb

FactoryGirl.define do
  factory :item, :class => 'Item' do
    name { Forgery::Name.name }
    sequence(:ordering)
  end
end

3 个答案:

答案 0 :(得分:1)

在类似情况下,我使用了Ruby的.times方法(docs)来生成一定数量的Factory项目,然后将对象映射到数组中:

# spec/model/item_spec.rb
require 'spec_helper'

describe Item do

  let(:items) {3.times.map {FactoryGirl.create(:item)} } # An array of Items

  it "should sort the items in order" do
    # tests order
  end      
end 

答案 1 :(得分:0)

在某处,您正在测试FactoryGirl是否正常工作。假设ordering有一些排序机制,你还可以测试比较器是否正常工作:

expect(generate(:ordering) <=> generate(:ordering)).to eq(-1)
# because
expect(1 <=> 2).to eq(-1)

如果它类似于readme中的电子邮件序列,并且您的排序不正确,则可能是FactoryGirl中的错误。

答案 2 :(得分:0)

# spec/model/item_spec.rb
require 'spec_helper'

describe Item do
  let(:items) { FactoryGirl.create_list(:item, 3) }

  it "should sort the items in order" do
    # tests order
  end      
end

也做同样的事情。查看docs