Ruby on rails Rspec控制器测试需要对象gots ActiveRecord::关系
我想使用以下示例为我的控制器创建一个基本测试: 结果是: 失败/错误:expect(分配(:订单))到eq([订单])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
应为:[#]
得到:#
我不明白为什么我得到的是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