Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec控制器测试需要对象gots ActiveRecord::关系_Ruby On Rails_Ruby_Rspec_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Rspec控制器测试需要对象gots ActiveRecord::关系

Ruby on rails Rspec控制器测试需要对象gots ActiveRecord::关系,ruby-on-rails,ruby,rspec,ruby-on-rails-5,Ruby On Rails,Ruby,Rspec,Ruby On Rails 5,我想使用以下示例为我的控制器创建一个基本测试: 结果是: 失败/错误:expect(分配(:订单))到eq([订单]) 应为:[#] 得到:# 我不明白为什么我得到的是ActiveRecord::Relation[]而不是order对象您可以使用: 为什么使用eq([order])而不是eq(order)?您是否在控制器中设置了@orders变量?@Sandra对这两个变量的结果相同them@bsvin33t是的,我正在设置。“我不明白为什么我得到的是ActiveRecord::Relatio

我想使用以下示例为我的控制器创建一个基本测试:

结果是:

失败/错误:expect(分配(:订单))到eq([订单])

应为:[#]
得到:#
我不明白为什么我得到的是
ActiveRecord::Relation[]
而不是order对象

您可以使用:


为什么使用
eq([order])
而不是
eq(order)
?您是否在控制器中设置了
@orders
变量?@Sandra对这两个变量的结果相同them@bsvin33t是的,我正在设置。“我不明白为什么我得到的是ActiveRecord::Relation[]而不是order对象”-答案在您的控制器中。您可能有类似于
@orders=Order.all
的内容。这是一个懒惰的查询。在您尝试读取之前,它不会执行,而在这里您不会这样做。要克服此错误,最简单的方法是使查询变得急切:
Order.all.to\u a
。这将给你一个数组。我记得写过这样的代码,但我还没有测试过。上面的例子有相似的语法——创建一个数组并将其与relation.interest匹配。我想我从来没有试过用它来对付一个亲戚,但我没有理由不相信医生。
describe "GET index" do
    it "assigns @orders" do
      order = Order.create(id:1)
      get :index
      expect(assigns(:orders)).to eq([order])
    end
  end
   expected: [#<Order id: 1, quantity: nil, company_id: nil, created_at: nil, updated_at: nil>]
        got: #<ActiveRecord::Relation []>
it "assigns @orders" do
  order = Order.create(id:1)
  get :index
  expect(assigns(:orders)).to match_array([order])
end