Wie verspotten Sie Parameter beim Testen des Setters eines Schienenmodells?
-
01-07-2019 - |
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.
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.