FactoryGirl初始化_具有多个参数

时间:2014-07-30 17:46:19

标签: ruby-on-rails ruby factory-bot factories

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

def initialize(sha, message, repo)
    sha = commit.sha
    message = commit.message
    associate_with(repo)
end

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

FactoryGirl.define do
  factory :commit do
    intialize_with { new("test_sha", "test_msg", "test_repo") }
  end
end

但这给了我wrong number of arguments (0 for 3)。是否无法将多个参数传递给initialize_with

2 个答案:

答案 0 :(得分: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

这将调用

Commit.new({sha: "test_sha", message: "test_message", repo: "test_repo"})

然后,您必须正确初始化其他对象,例如

FactoryGirl.define do
  factory :my_other_class do
    initialize_with { new('test_sha', 'test_msg', 'test_repo') }
  end
end

哪个会调用MyOtherClass.new("test_sha", "test_msg", "test_repo")虽然这看起来有点缺陷,因为你期望MyOtherClass引用一个提交并覆盖shamessage可能更多的代码会有用< / p>

答案 1 :(得分:3)

您需要将repo作为工厂的transient属性。

FactoryGirl.define do
  factory :commit do
    sha "test_sha"
    message "test_message"
    transient { repo "test_repo" }
    intialize_with { new(sha: sha, message: message, repo: repo) }
  end
end