Как сделать вспомогательный метод доступным для фабрик? (Рельсы, РСПЭ c) - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь вызвать вспомогательный метод внутри фабрики, но он постоянно возвращается, поскольку метод не найден. Вот вспомогательный метод

/ spec / helpers / factories.rb

module Helpers
  module Factories

    def array_of_fakers(faker_class, field, number_of_elements)
      faker_array = Array.new
      number_of_elements.times do
        factory_array.push(class_eval(faker_class).send(field))
      end
      faker_array
    end

  end
end

он называется так ...

factory :salesman do
    clients { Helpers::Factories.array_of_fakers("Faker::Company", "name", rand(1..5)) }
    ...
end

Я пробовал требовать в rails_helper, spec_helper и сам файл, но все они возвращают одинаковые результаты. Я также попробовал это, не включая имена модулей и только имя метода, но это тоже не работает. Это возможно?

1 Ответ

0 голосов
/ 10 февраля 2020

Включите ваш вспомогательный модуль в FactoryBot::DefinitionProxy:

# spec/helpers/factories.rb

module Helpers
  module Factories

    def array_of_fakers(faker_class, field, number_of_elements)
      # ...
    end
  end
end
# spec/support/factory_bot_extension.rb
# (or any other file that gets required in spec/spec_helper.rb)

require_relative './helpers/factories'

FactoryBot::DefinitionProxy.send(:include, Helpers::Factories)
# spec/factories/salesman.rb

factory :salesman do
  clients { array_of_fakers("Faker::Company", "name", rand(1..5)) }
  ...
end
...