Rails モデルのセッターをテストするときに、params をどのようにモックしますか?
-
01-07-2019 - |
質問
からのコードを考えると、 複合体パートⅢ 仮想属性をテストするにはどうすればよいでしょうか?
def new_task_attributes=(task_attributes)
task_attributes.each do |attributes|
tasks.build(attributes)
end
end
現在、次のようにテストしようとしています。
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
しかし、次のエラーが発生します。
メソッドエラーなし:未定義の方法 `stringify_keys! ' 「new_tasks_attributes」:stringの場合
このテストを改善するための提案をいただければ幸いです。
解決
new_task_attributes= がハッシュの配列を期待しているように見えますが、それにハッシュを渡しています。これを試して:
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
他のヒント
スタックトレース全体を見ることができますか?String#stringify_keys はどこで考えられますか?呼ばれてるの?
また、params は奇妙に思えます。task.build() は次のような入力を期待していますか: ["new_tasks_attribute", {"name" => "paint fence"}]
?
そうでない場合は、実際には Hash#each() の代わりに Hash#each_key() が必要なのではないでしょうか?
さらに多くのデータが必要です。また、Ruby タグを Rails タグに付随させることを検討することもできます。
所属していません StackOverflow