Как вы высмеиваете params при тестировании установщика модели Rails?
Учитывая код из Сложной Формы, часть III, как бы вы провели тестирование виртуального атрибута?
def new_task_attributes=(task_attributes)
task_attributes.each do |attributes|
tasks.build(attributes)
end
end
В настоящее время я пытаюсь проверить это так:
def test_adding_task_to_project
p = Project.new
params = {"new_tasks_attributes" => [{ "name" => "paint fence"}]}
p.new_tasks_attributes=(params)
p.save
assert p.tasks.length == 1
end
Но я получаю следующую ошибку:
NoMethodError: неопределенный метод `stringify_keys!' для "new_tasks_attributes":String
Будем очень благодарны за любые предложения по улучшению этого теста.
2 ответа
Похоже, что new_task_attributes= ожидает массив хэшей, но вы передаете ему хэш. Попробуй это:
def test_adding_task_to_project
p = Project.new
new_tasks_attributes = [{ "name" => "paint fence"}]
p.new_tasks_attributes = (new_tasks_attributes)
p.save
assert p.tasks.length == 1
end
Можем ли мы увидеть весь след стека? Где он думает String#stringify_keys! называется?
Кроме того, params выглядит странно для меня. Задачи.build() ожидают ввода следующим образом: ["new_tasks_attribute", {"name" => "paint fence"}]
?
Если нет, может быть, вы на самом деле хотите Hash#each_key() вместо Hash#each()?
Нужно больше данных. Кроме того, вы можете использовать тег Ruby для сопровождения вашего тега Rails.