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

#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)

2 ответа

Решение

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

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

Таким образом, вам нужно будет выполнить одно из следующих действий (только в коде настройки теста):

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

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

FactoryGirl.define do

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

конец

Справка: документация

Что было полезно для меня, так это включение вывода отладки для линтинга FactoryBot:

FactoryBot.lint verbose: true

см документации для деталей

Другие вопросы по тегам