1

複雑な形式のパート IIIのコードが与えられた場合、仮想属性をどのようにテストしますか?

  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

しかし、次のエラーが発生します。

NoMethodError: 未定義のメソッド `stringify_keys!' 「new_tasks_attributes」の場合:文字列

このテストを改善するための提案は大歓迎です。

4

2 に答える 2

3

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
于 2008-09-18T15:04:59.487 に答える
0

スタック トレース全体を確認できますか? どこで String#stringify_keys! と思いますか? 呼ばれている?

また、 params は私には奇妙に見えます。tasks.build() は次のような入力を期待しています["new_tasks_attribute", {"name" => "paint fence"}]か?

そうでない場合、実際には Hash#each() の代わりに Hash#each_key() が必要なのでしょうか?

もっとデータが必要です。また、Rails タグに Ruby タグを付けることを検討することもできます。

于 2008-09-18T15:11:26.100 に答える