我正在尝试测试工厂的顺序。 (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
答案 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