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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top