Rails モデルのセッターをテストするときに、params をどのようにモックしますか?

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

質問

からのコードを考えると、 複合体パートⅢ 仮想属性をテストするにはどうすればよいでしょうか?

  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 タグに付随させることを検討することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top