FactoryGirl initialize_ с несколькими параметрами
У меня есть модель с несколькими параметрами в инициализации, один из которых используется в методе модели при создании экземпляра:
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 ответа
Это 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
ссылаться на коммит и перезаписывать sha
а также message
может быть, больше кода будет полезно
Вам нужно сделать 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