有没有办法通过插件进行猴子补丁的rails测试?

| 我和我的团队一直在为Rails 2.3应用程序(Redmine,当前为1.1分支)大量生产插件。到目前为止,我们通过将大多数更改编写为rails插件来避免污染Redmine的基本代码。这有两个主要好处: 在大多数情况下,与较新的Redmine版本的集成非常简单。 我们可以通过拖放插件来启用/禁用某些自定义行为。实际上,这是我们的关键因素,因为我们的客户有相当不同的要求。 我们的某些插件是猴子补丁Redmine的类。例如,我们有一个插件可以对
Issue
模型“注入”更严格的验证:
leaf?
问题需要
start_date
due_date
estimated_hours
。 猴子修补程序使一些测试失败和/或引发异常。例如,这个插件使plugin6ѭ类中的
create_issue!
方法产生无效问题(即缺少该插件执行的必需属性):
# Helper that creates an issue with default attributes
def create_issue!(attributes={})
  Issue.create!({:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => \'test\'}.merge(attributes))
end
由于该插件可能处于活动状态,也可能处于非活动状态,因此我们不想更改测试本身。我们认为最好是相应地对猴子进行补丁修补测试:
module StandardTestPatches
  module InstanceMethods
    def create_issue_with_gespro_standards!(attributes={})
      attributes.merge!(:start_date => 1.day.ago, :due_date => 1.day.from_now, :estimated_hours => 8)
      create_issue_without_gespro_standards!(attributes)
    end
  end

  def self.included(base)
    base.send :include, InstanceMethods
    base.class_eval do
      alias_method_chain :create_issue!, :gespro_standards
    end
  end
end
但是,由于在加载测试类之前需要插件的
init.rb
文件,因此我们无法在那里猴子
IssueNestedSetTest
类的补丁。 有没有办法通过插件进行猴子补丁的rails测试? 更新:仍然是一个悬而未决的问题。在http://www.redmine.org/boards/1/topics/23672上提供该功能     
已邀请:
每当我编写Redmine或ChiliProject插件时,我总是假定: 插件的测试将独立运行(在插件目录中) 插件可能会修改核心代码,以至于核心测试将失败 我已经尝试通过修补核心测试来帮助其他人解决此问题,但是我们从来没有找到一个好的解决方案。测试可能会在核心中发生变化,另一个插件会破坏某些东西,或其他。我什至试图模拟测试中的接口,但是维护它们是一个时间杀手。 我建议(并做)的是: 删除所有非核心插件 检查核心测试是否通过 安装插件A cd进入PluginA \的目录 独立运行PluginA的测试 (如果稍后同时安装了PluginA和PluginB,您可能会遇到问题) 抱歉,没有更好的解决方案。     

要回复问题请先登录注册