【发布时间】:2019-12-19 21:18:24
【问题描述】:
我想使用此处的示例为我的控制器创建一个基本测试:https://relishapp.com/rspec/rspec-rails/docs/controller-specs
describe "GET index" do
it "assigns @orders" do
order = Order.create(id:1)
get :index
expect(assigns(:orders)).to eq([order])
end
end
结果是:
失败/错误:expect(assigns(:orders)).to eq([order])
expected: [#<Order id: 1, quantity: nil, company_id: nil, created_at: nil, updated_at: nil>]
got: #<ActiveRecord::Relation []>
我不明白为什么我得到ActiveRecord::Relation [] 而不是订单对象
【问题讨论】:
-
为什么使用
eq([order])而不是eq(order)? -
您是否在控制器中设置
@orders变量? -
@Sandra 结果相同
-
@bsvin33t 是的,我正在设置。
-
“我不明白为什么我得到 ActiveRecord::Relation [] 而不是订单对象” - 答案就在你的控制器中。你可能在那里有类似
@orders = Order.all的东西。这是一个懒惰的查询。在您尝试从中读取之前,它不会执行,而您在这里没有。解决此错误的最简单方法是使查询变得急切:Order.all.to_a。这将给你一个数组。
标签: ruby-on-rails ruby rspec ruby-on-rails-5