FactoryBot.define do factory :shipment_with, class: Spree::Shipment do tracking 'U10000' number '100' cost 100.00 state 'pending' order address stock_location trait :shipping_method do transient do shipping_method { create(:shipping_method) } end shipping_rates { [Spree::ShippingRate.create(shipping_method: shipping_method, selected: true)] } after(:create) do |shipment, _evaluator| shipment.order.line_items.each do |line_item| line_item.quantity.times { shipment.inventory_units.create(variant_id: line_item.variant_id) } end end end end end FactoryBot.modify do factory :shipment, class: Spree::Shipment do # keeps test shipments unique per order initialize_with { Spree::Shipment.find_or_create_by_order_id(order.id) } end end