#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
Run Code Online (Sandbox Code Playgroud)
尝试构建@room时,运行rspec会导致此错误
ArgumentError:参数数量错误(0表示2)
B S*_*ven 21
现在确实如此.在4.1版上测试:
FactoryGirl.define do
factory :room do
length 10
width 20
initialize_with { new(length, width) }
end
Run Code Online (Sandbox Code Playgroud)
结束
参考:文档
Cas*_*per 10
FactoryGirl
目前不支持带参数的初始值设定项.所以Room.new
当你跑步的时候它会失败build
.
一个简单的解决方法可能是在测试设置中修补您的类以解决此问题.它不是理想的解决方案,但您可以运行测试.
所以你需要做其中任何一个(只在你的测试设置代码中):
class Room
def initialize(length = nil, width = nil)
...
end
end
Run Code Online (Sandbox Code Playgroud)
要么
class Room
def initialize
...
end
end
Run Code Online (Sandbox Code Playgroud)
这个问题在这里讨论:https:
//github.com/thoughtbot/factory_girl/issues/42
......在这里:https:
//github.com/thoughtbot/factory_girl/issues/19