ruby-on-rails – RSpec for Index中的instance_variable

ruby-on-rails – RSpec for Index中的instance_variable,第1张

概述这是一个非常简单的问题,但我找不到任何解决方案.已经3天了.请帮忙. 所以我有这个 users_controller.rb def index @users = @users.normal.order(:name).page params[:page]end 所以我在users_controller_spec.rb中有这个 it "assign all normal users to @us 这是一个非常简单的问题,但我找不到任何解决方案.已经3天了.请帮忙.

所以我有这个

users_controller.rb

def index  @users = @users.normal.order(:name).page params[:page]end

所以我在users_controller_spec.rb中有这个

it "assign all normal users to @users" do  users = User.normal.all  get :index  expect(assigns(:users)).to eq(users)end

我的代码基于https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs.

在我的终端中运行rspec后,这就是输出.

Diff:   @@ -1,4 +1,4 @@   -[#<User:0x00000004aa32b0   +[#<User:0x00000004a085a8      ID: 2,name: "Christian galamay",admin: false,@@ -20,7 +20,7 @@      updated_at: Wed,13 Apr 2016 01:46:17 UTC +00:00,role: "normal",avatar: nil>,- #<User:0x00000004aa2ea0   + #<User:0x000000049dbd78      ID: 3,name: "Grace Sojor",@@ -42,7 +42,- #<User:0x00000004aa2ab8   + #<User:0x000000049db760      ID: 4,name: "Karl Pandacan",

输出表示除了用户之后的十六进制,所有值都相同.所以我的问题是(1)为什么在比较两个ActiveRecord后包含用户之后的十六进制(2)是否有任何方法或函数用于忽略用户中的十六进制.谢谢

解决方法 输出有点误导.这两件事情不相同,因为它们是关系对象,两个ActiveRecord :: Relation对象之间的==通过比较生成的sql来工作.在您的情况下,关系不相等:在控制器中,您正在分页并设置订单.

Rspec试图通过显示2个对象的to_s输出的diff来提供帮助,但是这最终会比较查询的结果(实际上是相同的对象),因此它在该字符串输出中找到的唯一区别是对象IDS.这部分是运气 – 没有订单子句,对象可能以不同的顺序返回.显而易见:显示的diff输出就是为了帮助你,这并不意味着这就是rspec进行比较的方式.

如果你想要的是比较查询的结果,那么你可以使用to_a来做到这一点:

expect(assigns(:users)).to eq(users.to_a)

如果您不关心订单,您也可以这样做

expect(assigns(:users)).to match_array(users)

这是一个稍微不同的测试:如果db决定以不同的方式返回结果,它将不会失败,这可能如上所述.

总结

以上是内存溢出为你收集整理的ruby-on-rails – RSpec for Index中的instance_variable全部内容,希望文章能够帮你解决ruby-on-rails – RSpec for Index中的instance_variable所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存