【问题标题】:Maintain compatibility with Minitest v4, test Rails 4.1保持与 Minitest v4 的兼容性,测试 Rails 4.1
【发布时间】: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


【解决方案1】:

看起来像 ActiveModel::Serializers defines the missing constant:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2020-12-16
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多