Как решить фабрику неправильная число ошибок аргументов - PullRequest
10 голосов
/ 27 июля 2011
#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 ]

20 голосов
/ 18 октября 2012

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

FactoryGirl.define do

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

конец

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

10 голосов
/ 27 июля 2011

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

...