Ruby on rails 测试Rails模型时如何模拟参数';谁是二传手?

Ruby on rails 测试Rails模型时如何模拟参数';谁是二传手?,ruby-on-rails,unit-testing,testing,testing-strategies,Ruby On Rails,Unit Testing,Testing,Testing Strategies,给定来自的代码,您将如何测试虚拟属性 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_attr

给定来自的代码,您将如何测试虚拟属性

  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\u keys!”对于“新任务\属性”:字符串


如果您对改进此测试有任何建议,我们将不胜感激。

看起来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

我们能看到整个堆栈跟踪吗?它认为字符串在哪里!有人打电话吗

而且,params在我看来很奇怪。Is tasks.build()需要如下输入:
[“新任务”属性“,{“名称”=>“绘制围栏”}]

如果不是,也许你真的想要Hash#each_key()而不是Hash#each()

需要更多的数据。另外,你可以考虑一个Ruby标签来陪你的Rails标签。