Как решить неправильное количество аргументов factory_girl

#rspec test code
@room = FactoryGirl.build(:room)

#factory definition
factory :room do
  length {10}
  width {20}
end

#code implementation
class Room
  attr_accessor :length, :width

  def initialize(length,width)
     @length = length
     @width = width 
  end

end

Запуск rspec приводит к этой ошибке при попытке построить @room

ArgumentError:          неправильное количество аргументов (0 для 2)

Ответ 1

FactoryGirl в настоящее время не поддерживает инициализаторы с аргументами. Поэтому при запуске build он пытается выполнить Room.new.

Одним из простых способов решения этой проблемы может стать обезвреживание ваших классов в тестовой настройке, чтобы обойти эту проблему. Это не идеальное решение, но вы сможете запускать тесты.

Таким образом, вам нужно будет сделать один из них (только в вашем тестовом установочном коде):

class Room
   def initialize(length = nil, width = nil)
     ...
   end
end

или

class Room
  def initialize
    ...
  end
end

Вопрос обсуждается здесь:
https://github.com/thoughtbot/factory_girl/issues/42

... и здесь:
https://github.com/thoughtbot/factory_girl/issues/19

Ответ 2

Теперь это так. Протестировано на версии 4.1:

FactoryGirl.define do

  factory :room do
    length 10
    width 20
    initialize_with { new(length, width) }
  end

конец

Ссылка: документация

Ответ 3

Для меня было полезно включить отладочный вывод для линков FactoryBot:

FactoryBot.lint verbose: true

см. документацию для получения подробной информации.