这是我与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
(复制所有内容)并对我的新功能执行所有必需的修改,则所有测试都保持绿色。
我不想覆盖整个班级,因为它承担了很多责任,并且应用社区可能创建的最终修复将是一件痛苦的事。
如果这还不够,我会很乐意提供更多背景信息。我理解在你的环境中复制这个是一种负担,所以欢迎任何提示。
谢谢