Como você zomba dos parâmetros ao testar o setter de um modelo de trilhos?
-
01-07-2019 - |
Pergunta
Dado o código do Formulário complexo Parte III Como você testaria o atributo virtual?
def new_task_attributes=(task_attributes)
task_attributes.each do |attributes|
tasks.build(attributes)
end
end
Atualmente, estou tentando testar assim:
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
Mas estou recebendo o seguinte erro:
NOMETHODERROR: Método indefinido `stringify_keys! ' Para "new_tasks_attributes": string
Quaisquer sugestões para melhorar esse teste seriam muito apreciadas.
Solução
Parece que new_task_attributes = está esperando uma matriz de hashes, mas você está passando um hash. Experimente isso:
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
Outras dicas
Podemos ver todo o rastreamento da pilha? Onde ele pensa que a string#stringify_keys! está sendo chamado?
Além disso, Params parecem estranhos para mim. É tarefa.build () Esperando entrada como esta: ["new_tasks_attribute", {"name" => "paint fence"}]
?
Caso contrário, talvez você realmente queira hash#ene_key () em vez de hash#cada ()?
Precisa de mais dados. Além disso, você pode considerar uma etiqueta rubi para acompanhar sua tag Rails.