【发布时间】:2014-05-01 03:15:33
【问题描述】:
我正在开发一个 Ruby gem,它支持多个版本的 Rails,至少从 3.2 到 4.1,并通过 minitest 对不同的 Rails 版本使用单独的 gemfile 进行测试。随着 Rails 4.0 开始指定对 minitest 的依赖项 ~> 4.2 并在 4.1 中将其增加到 ~> 5.1,将 rails 作为依赖项似乎决定了 minitest 的安装版本和 gem 本身的测试设置。
这是一个问题,因为Minitest 5.x 向后不兼容4.x,主要是MiniTest::Unit::TestCase is now Minitest::Test.
我正在寻找一种优雅的方式来保持兼容性 - 我看过的其他 gem 似乎只是破坏了兼容性,例如minitest-rails:
有关在 Rails 3.0 到 4.0 中使用 minitest-rails 的信息,请参阅 1.x 分支的自述文件
两种可能的解决方案是:重新定义缺失的类,
unless defined?(MiniTest::Unit::TestCase)
class MiniTest::Unit::TestCase < Minitest::Test; end
end
或者定义一个通用的父类来继承,
Testcase = Minitest.const_defined?(:Test) ? Minitest::Test : Minitest::Unit::TestCase
但是,关于这两种方法的优缺点或解决此问题的其他 gem 示例的反馈会很棒。
【问题讨论】:
-
minitest-rails 1.0 包含 minitest-test,它将 Minitest::Test 添加到 MiniTest 4.x。
-
感谢@blowmage,minitest-test (rubygems.org/gems/minitest-test) 似乎也是一种替代方案。
标签: ruby gem minitest ruby-on-rails-4.1