¿Cómo te burlas de los parámetros cuando pruebas el configurador de un modelo Rails?
-
01-07-2019 - |
Pregunta
Dado el código del Forma compleja parte III ¿Cómo harías para probar el atributo virtual?
def new_task_attributes=(task_attributes)
task_attributes.each do |attributes|
tasks.build(attributes)
end
end
Actualmente estoy intentando probarlo así:
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
Pero recibo el siguiente error:
Ningún error de método:Método indefinido `stringify_keys! ' para "new_tasks_attributes": cadena
Cualquier sugerencia para mejorar esta prueba será muy apreciada.
Solución
Parece que new_task_attributes= espera una serie de hashes, pero le estás pasando un hash.Prueba esto:
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
Otros consejos
¿Podemos ver el seguimiento completo de la pila?¿Dónde piensa String#stringify_keys!esta siendo llamado?
Además, los parámetros me parecen extraños.¿Tareas.build() espera una entrada como esta? ["new_tasks_attribute", {"name" => "paint fence"}]
?
Si no es así, ¿quizás realmente quieras Hash#each_key() en lugar de Hash#each()?
Necesita más datos.Además, podría considerar una etiqueta Ruby para acompañar su etiqueta Rails.