Frage

Angesichts des Codes aus dem Komplexer Formen Teil III Wie würden Sie das virtuelle Attribut testen?

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

Ich versuche gerade, es so zu testen:

  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

Aber ich bekomme den folgenden Fehler:

Nomethoderror: undefinierte Methode "Stringify_keys!" Für "new_tasks_attributes": String

Alle Vorschläge zur Verbesserung dieses Tests wären sehr geschätzt.

War es hilfreich?

Lösung

Es sieht so aus, als würde New_task_attributes = eine Reihe von Hashes erwarten, aber Sie übergeben es einen Hash. Versuche dies:

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

Andere Tipps

Können wir die ganze Stapelspur sehen? Wo denkt es sich an String#stringify_keys! Wird angerufen?

Auch Parameter sehen für mich seltsam aus. IS Tasks.build () erwartet wie folgt: ["new_tasks_attribute", {"name" => "paint fence"}] ?

Wenn nicht, möchten Sie vielleicht tatsächlich Hash#Ever_key () anstelle von Hash#jeweils ()?

Benötigen Sie mehr Daten. Sie können auch ein Ruby -Tag in Betracht ziehen, um Ihr Schienenschild zu begleiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top