1

我正在开发一个 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 分支的 README

两个可能的解决方案是:重新定义缺失的类,

unless defined?(MiniTest::Unit::TestCase)
  class MiniTest::Unit::TestCase < Minitest::Test; end
end

或定义一个共同的父类来继承,

Testcase = Minitest.const_defined?(:Test) ? Minitest::Test : Minitest::Unit::TestCase

但是关于这两种方法的优缺点或解决此问题的其他宝石示例的反馈会很棒。

4

1 回答 1

1

看起来 ActiveModel::Serializers定义了缺少的常量

Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)

这似乎是一个不错的方法。

于 2014-05-01T22:24:29.307 回答