加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – RSpec失败,因为它认为ActiveRecord对象不相等

发布时间:2020-12-17 02:00:04 所属栏目:百科 来源:网络整理
导读:很简单的规格…… @post.user.should == @user 即使两个对象除了object_id之外在各方面都相同,Spec也会失败.如果它们的id相同,则ActiveRecord对象应该等于(==).使用factory_girl创建对象.我已经确认这两个对象都不是“.new_record?”.比较@ post.user.id和@
很简单的规格……

@post.user.should == @user

即使两个对象除了object_id之外在各方面都相同,Spec也会失败.如果它们的id相同,则ActiveRecord对象应该等于(==).使用factory_girl创建对象.我已经确认这两个对象都不是“.new_record?”.比较@ post.user.id和@ user.id有效.

更多的是行为不一致.这些测试工作正在进行,现在尽管没有任

> Rails 3.1
> rspec-2.6
> factory_girl-2.0.5
> factory_girl_rails-1.1.0
> jruby 1.6.4(ruby-1.9.2-p136)
> windows7

我通常使用spork,但这也没有spork.

更多细节:

在ActiveRecord :: Base中,有问题的代码行似乎如下

def ==(comparison_object)
  super ||
    comparison_object.instance_of?(self.class) &&
    id.present? &&
    comparison_object.id == id
end

具体来说,“instance_of?”检查失败的时候不应该.我检查了两个对象的类层次结构.但是,当我检查每个对象的class.id时,它们并不相同.

此外,行为取决于我运行的命令…

jruby -S bundle exec rspec spec (FAILS)
jruby -S bundle exec rspec specmodels (PASSES)
jruby -S bundle exec rspec specmodelspost_spec.rb (PASSES)

在我的环境/ test.rb文件中设置cache_classes = true似乎解决了这个问题,但我不认为这是必要的.

解决方法

这最终真的很傻.问题是我在/ spec / integration中进行了集成测试而不是/ spec / requests. Rspec / Rails只在一组特定的目录中执行加载魔法,但会从所有目录运行所有测试(导致双重加载).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读