Ruby on rails Can';在不破坏原始测试的情况下重写Spree::Order类

Ruby on rails Can';在不破坏原始测试的情况下重写Spree::Order类,ruby-on-rails,rspec,spree,Ruby On Rails,Rspec,Spree,这是我的第二个项目。在第一个版本(1.0)中工作时,我没有对Spree的实现运行测试 这一次(Spree 3.0),我决定维护一个结构,以针对主机应用程序运行Spree的测试,并在需要时进行更改。我复制了Spree的规范,这实际上是在中推荐的,并将spec\u helper.rb更改为加载我的应用程序,而不是由bundle exec rake test\u app创建的test\u app 一切正常,直到我试图重写Spree::Order类。奇怪的是,测试仅仅出现了Spree::Order.cl

这是我的第二个项目。在第一个版本(1.0)中工作时,我没有对Spree的实现运行测试

这一次(Spree 3.0),我决定维护一个结构,以针对主机应用程序运行Spree的测试,并在需要时进行更改。我复制了Spree的规范,这实际上是在中推荐的,并将
spec\u helper.rb
更改为加载我的应用程序,而不是由
bundle exec rake test\u app
创建的test\u app

一切正常,直到我试图重写
Spree::Order
类。奇怪的是,测试仅仅出现了
Spree::Order.class_eval
,就打破了,即使里面没有任何东西

无论何时尝试在测试上创建命令,我都会得到
Spree::User预期值,但得到Spree::LegacyUser
。不过,我在使用开发环境时没有遇到任何问题

有人可能会问,为什么这些测试使用的是
Spree::LegacyUser
而不是
Spree::User
,这正是我在主机应用程序中使用的。原因是很多测试模拟
User::LegacyUser
。由上述任务创建的虚拟应用程序也使用
LegacyUser

我想不出在创建订单时会有什么干扰。在
Spree::Order
中,我们可以找到以下代码,这些代码应该处理特定的用户类型:

if Spree.user_class
  belongs_to :user, class_name: Spree.user_class.to_s
  belongs_to :created_by, class_name: Spree.user_class.to_s
  belongs_to :approver, class_name: Spree.user_class.to_s
  belongs_to :canceler, class_name: Spree.user_class.to_s
else
  belongs_to :user
  belongs_to :created_by
  belongs_to :approver
  belongs_to :canceler
end
如果我重新打开
Spree::Order
(复制所有内容)并对我的新功能执行所有必需的修改,所有测试将保持绿色

我不想覆盖整个类,因为它承担了很多责任,应用社区可能创建的最终修复将是一件痛苦的事情

如果这还不够,我很乐意提供更多的上下文。我理解在您的环境中复制这一点是一种负担,所以欢迎提供任何提示


谢谢你

我知道这是很久以前的事了,但是当你说你“复制了疯狂测试”时,你做了什么?我没有看到任何要复制的规范文件夹。我从spree原始回购中复制了规范文件夹。实际上我把它符号化了,但都一样。这使我能够针对我的实际应用程序运行疯狂测试。有趣的是,这就是我认为你的意思,但我在repo的根目录中没有看到spec文件夹,这是来自core还是组件gems的谢谢你的信息!