Поддерживать совместимость с Minitest v4, тестировать Rails 4.1

Я работаю над гемом Ruby, который поддерживает несколько версий Rails, по крайней мере, от 3.2 до 4.1, и тестируется с помощью минитеста с отдельными гемфайлами для разных версий Rails. Поскольку Rails 4.0 начинает указывать зависимость от minitest от ~> 4.2, а в версии 4.1 — от ~> 5.1, использование rails в качестве зависимости, по-видимому, диктует установленную версию minitest и настройку тестирования самого драгоценного камня.

Это проблема, потому что Minitest 5.x обратно несовместим с 4.x, в основном MiniTest::Unit::TestCase is now Minitest::Test.

Я ищу элегантный способ поддерживать совместимость - другие драгоценные камни, на которые я смотрел, похоже, просто нарушают совместимость, например. minitest-rails:

Для получения информации об использовании minitest-rails с Rails от 3.0 до 4.0 см. README для ветки 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

но отзывы о плюсах и минусах любого подхода или примеры других драгоценных камней, решающих эту проблему, были бы замечательными.


person phillbaker    schedule 01.05.2014    source источник
comment
minitest-rails 1.0 включает minitest-test, который добавляет Minitest::Test в MiniTest 4.x.   -  person blowmage    schedule 01.05.2014
comment
Спасибо @blowmage, minitest-test (rubygems.org/gems/minitest-test) выглядит как тоже альтернатива.   -  person phillbaker    schedule 03.05.2014


Ответы (1)


Похоже, ActiveModel::Serializers определяет отсутствующую константу:

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

Это кажется достойным подходом.

person phillbaker    schedule 01.05.2014