Comment vous moquez-vous des paramètres lorsque vous testez le programme de configuration d'un modèle Rails?

StackOverflow https://stackoverflow.com/questions/93214

Question

Étant donné le code de la forme complexe, partie III , comment procéderiez-vous pour tester l'attribut virtuel?

  def new_task_attributes=(task_attributes)
    task_attributes.each do |attributes|
      tasks.build(attributes)
    end
  end

J'essaie actuellement de le tester comme ceci:

  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

Mais j'obtiens l'erreur suivante:

  

NoMethodError: méthode non définie `stringify_keys! ' pour "new_tasks_attributes": String

Toute suggestion sur l'amélioration de ce test serait grandement appréciée.

Était-ce utile?

La solution

Il semble que new_task_attributes = attend un tableau de hachages, mais vous lui transmettez un hachage. Essayez ceci:

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

Autres conseils

Peut-on voir toute la trace de la pile? Où pense-t-il String # stringify_keys! est appelé?

De plus, les paramètres me paraissent étranges. Tasks.build () attend-il une entrée comme celle-ci: [" new_tasks_attribute ",, {& name " = > "clôture de peinture"}] ?

Sinon, vous voulez peut-être réellement Hash # each_key () au lieu de Hash # each ()?

Besoin de plus de données. Vous pouvez également envisager l’ajout d’une balise Ruby à votre balise Rails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top