FactoryGirl 没有在构建中传递参数
FactoryGirl not passing arguments in build
我有一个 ruby 应用程序,我正在使用 rspec 和 factorygirl,但我在建造工厂时遇到了问题。当我 运行 规范时,我在初始化中得到所需关键字的 ArgumentError: missing keywords
。如果我显式传递它们,错误将更改为 wrong number of arguments 0 for 2
。
感谢您对此的任何帮助。
spec/models/player_spec.rb
require 'spec_helper'
describe Player do
it 'has a valid factory' do
player = build(:player) # or build(:player, name: 'testname', password: 'testpw')
end
end
spec/factories/player.rb
FactoryGirl.define do
factory :player do
name { 'Testname' }
password { 'testpass' }
end
end
models/player.rb
def initialize(name:, password:)
@id = object_id
@name = name
@password = password
end
您是否尝试使用他们在 github 存储库自述文件中推荐的语法?
看起来定义工厂是使用以下语法完成的:
FactoryGirl.define do
factory :player do
name 'Testname'
password 'testpass'
end
end
它们可能是等价的,但这对我来说是一个潜在的问题。似乎只要您执行逻辑而不是声明,就会使用块。
我终于通过更改 player#initialize 方法以接受选项散列而不是关键字参数参数来实现它。
将您的 spec/factories/player.rb 更改为:
FactoryGirl.define do
factory :player do
name 'Testname'
password 'testpass'
initialize_with { new(name:name, password: password) }
end
end
您可以找到文档 here,但在这种情况下并未明确使用。
我有一个 ruby 应用程序,我正在使用 rspec 和 factorygirl,但我在建造工厂时遇到了问题。当我 运行 规范时,我在初始化中得到所需关键字的 ArgumentError: missing keywords
。如果我显式传递它们,错误将更改为 wrong number of arguments 0 for 2
。
感谢您对此的任何帮助。
spec/models/player_spec.rb
require 'spec_helper'
describe Player do
it 'has a valid factory' do
player = build(:player) # or build(:player, name: 'testname', password: 'testpw')
end
end
spec/factories/player.rb
FactoryGirl.define do
factory :player do
name { 'Testname' }
password { 'testpass' }
end
end
models/player.rb
def initialize(name:, password:)
@id = object_id
@name = name
@password = password
end
您是否尝试使用他们在 github 存储库自述文件中推荐的语法? 看起来定义工厂是使用以下语法完成的:
FactoryGirl.define do
factory :player do
name 'Testname'
password 'testpass'
end
end
它们可能是等价的,但这对我来说是一个潜在的问题。似乎只要您执行逻辑而不是声明,就会使用块。
我终于通过更改 player#initialize 方法以接受选项散列而不是关键字参数参数来实现它。
将您的 spec/factories/player.rb 更改为:
FactoryGirl.define do
factory :player do
name 'Testname'
password 'testpass'
initialize_with { new(name:name, password: password) }
end
end
您可以找到文档 here,但在这种情况下并未明确使用。