覆盖rails插件上的应用程序测试

时间:2010-09-13 13:05:39

标签: ruby-on-rails ruby-on-rails-plugins

我为OS Rails项目创建了一个插件。该插件使测试失败,为了保持系统的一致性,我想覆盖应用程序测试,一旦我的插件的行为被应用失败。

我已经创建了修补程序来通过类和实例方法中的补丁来修改某些现有类的方法,我认为我可以使用相同的测试,但不幸的是我无法访问插件中的应用程序测试。

当我试图访问TestClass时,我收到以下错误:

cannot remove Object::DEFAULT_OPTIONS
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `remove_const'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `remove_constant'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `instance_eval'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:603:in `remove_constant'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:549:in `new_constants_in'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:549:in `each'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:549:in `new_constants_in'
...source/trunk/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'

我读到了关于Dependencies.load_paths的内容,但我没有成功。

test_path = Rails.root.join('test', 'unit')
$LOAD_PATH << test_path
ActiveSupport::Dependencies.load_paths << test_path
require 'project_test'

知道是否可能以任何方式进行。

1 个答案:

答案 0 :(得分:0)

您可能想尝试load_once_paths,但我不确定它会解决您的问题。如果不查看导致问题的实际代码,就很难诊断出来。

尽管如此,您不必修改插件中的应用程序测试。应用程序的测试应该测试应用程序的开发人员期望看到的行为。如果将插件添加到应用程序会导致测试失败,那么应用程序的行为将不再是预期的。在这种情况下,如果行为符合要求,应用程序的开发人员需要更新测试(如果不需要行为,则删除或更改插件)。