Мне не нужно создавать отдельную последовательность для каждого кода
Это, очевидно, невозможно, поскольку FactoryBot
хранит итератор и вызывает #next
под капотом.Вы не можете разделить итератор между последовательностями.
Что вы можете сделать, вы можете начать непосредственно с "1234A"
:
"1234A".next
#⇒ "1234B"
К сожалению, он переходит на "1235A"
с "1234Z"
.Но "Z".next
производит "AA"
.Итак, оберните FactoryBot::DefinitionProxy#sequence
в:
FactoryBot::DefinitionProxy.prepend(Module.new do
def sequence(name, *args, &block)
if args.last.is_a?(Hash) && prefix = args.last.delete(:prefix)
super(name, *args) { |n| prefix + n }
else
super
end
end
end)
и назовите его следующим образом:
FactoryBot.define do
sequence("A", prefix: "1234")
end
Я не проверял его, и он, безусловно, может быть значительно улучшен, но идея должнабудь ясен.