在不破坏原始测试的情况下无法覆盖Spree :: Order类

时间:2015-12-09 17:48:00

标签: ruby-on-rails rspec spree

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

这一次(Spree 3.0)我决定维护一个结构来对主机应用程序运行Spree的测试,并在需要时进行更改。我复制了Spree的规范,实际上是guide推荐的,并更改spec_helper.rb来加载我的应用而不是bundle exec rake test_app创建的test_app。

一切正常,直到我试图覆盖Spree::Order类。奇怪的是,即使没有任何内容,测试也会因Spree::Order.class_eval的存在而破裂。

每当尝试在测试中创建订单时,我都会得到Spree::User expected, but got 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(复制所有内容)并对我的新功能执行所有必需的修改,则所有测试都保持绿色。

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

如果这还不够,我会很乐意提供更多背景信息。我理解在你的环境中复制这个是一种负担,所以欢迎任何提示。

谢谢

0 个答案:

没有答案