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
Другие вопросы по тегам