FactoryGirl初始化_具有多个参数

bur*_*rce 2 ruby ruby-on-rails factories factory-bot

我有一个初始化中有多个参数的模型,其中一个在实例化模型的方法中使用:

def initialize(sha, message, repo)
    sha = commit.sha
    message = commit.message
    associate_with(repo)
end
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用这些参数创建一个初始化它的工厂,但wrong number of arguments在尝试时会遇到错误:

FactoryGirl.define do
  factory :commit do
    intialize_with { new("test_sha", "test_msg", "test_repo") }
  end
end
Run Code Online (Sandbox Code Playgroud)

但这给了我wrong number of arguments (0 for 3).是不是可以传递多个args initialize_with

eng*_*nky 5

initialize上面的方法是Commit因为你正在调用的类Commit.new("test_sha", "test_msg", "test_repo")

因为我怀疑这是否适用Commit.

FactoryGirl.define do
  factory :commit do
    sha "test_sha"
    message "test_message"
    repo "test_repo"
    intialize_with { new(sha,message,repo) }
  end
end
Run Code Online (Sandbox Code Playgroud)

这会打电话

Commit.new({sha: "test_sha", message: "test_message", repo: "test_repo"})
Run Code Online (Sandbox Code Playgroud)

然后,您必须正确地初始化您的其他对象

FactoryGirl.define do
  factory :my_other_class do
    initialize_with { new('test_sha', 'test_msg', 'test_repo') }
  end
end
Run Code Online (Sandbox Code Playgroud)

哪个会调用MyOtherClass.new("test_sha", "test_msg", "test_repo")虽然即使这看起来有缺陷,因为你期望MyOtherClass引用一个提交并被覆盖sha,message也许更多代码会有用

  • 仅供参考 - 您可以使用工厂的所有公共属性调用`initialize_with {new(attributes)}`来获得相同的效果. (2认同)