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,但在这种情况下并未明确使用。