2013-07-24 10 views
10

После обновления с Rails 3.2 до Rails 4 мое приложение работает, но мои тесты, написанные на тестовом блоке, являются катастрофой.Можно ли использовать тестовый блок в рельсах 4?

По слухам, Minitest является «совместимым» с испытательным блоком. Однако, если я попытаюсь использовать (в настоящее время в комплекте) Minitest, есть множество различий - от имен и параметров утверждения assert *, чтобы (явно) многое другое делало как большие, так и тонкие.

Если я вместо этого попытаться избежать MiniTest и пытаться держать мой тест-блок драгоценный камень в моей Gemfile, тест грабли взрывает, говоря,

undefined method 'refute_predicate' for class 'ActiveSupport::TestCase' 

Это приводит из заехав

require 'rails/test_help' 

: (

Я искал какое-то время, но еще не понял, как продолжить использование тестового блока. Единственной альтернативой может быть (для нас, массивный) рефакторинг o ur, так как примерно 80% наших тестов каким-то образом нарушаются несовместимостью Minitest с тестовым модулем.

Чтение, т. Е. http://weblog.rubyonrails.org/2013/6/25/Rails-4-0-final/ и http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#upgrading-from-rails-3-2-to-rails-4-0 Я не нахожу никакого упоминания об этом по существу - я чувствую, что мне что-то не хватает.

Можно ли сделать Minitest более совместимым с испытательным блоком на систематической основе? Или продолжить использование тестового блока в Rails 4?

+0

Можете ли вы уточнить, какие несовместимости вы столкнулись? – blowmage

+0

assert_include vs. assert_includes, assert_not_include vs. assert_not_includes, assert_false против опровержения, assert_true vs. assert. Метод process_with_new_base_test отсутствует (необходимо было обернуть это, чтобы предотвратить размывание переменных экземпляра контроллера между запросами на тесты контроллера). С кучей тестов, которые все еще были сломаны, я отказался от этого момента. –

+0

Будете ли вы заниматься удаленным подключением? Стреляйте мне электронное письмо, и мы его настроим. – blowmage

ответ

3

Вы подклассы: Test :: Unit :: TestCase, а не ActiveSupport :: TestCase?

Может быть, попробуйте добавить minitest_tu_shim в тестовой группе:

https://github.com/seattlerb/minitest_tu_shim

или убедитесь, что подкласс ActiveSupport :: TestCase

0

Да Поддержка Rails Test :: Unit. Вот руководство для него.

http://guides.rubyonrails.org/testing.html

Используйте глобальный поиск & заменить на тестовых данных, чтобы изменить имена методов.

Вот интеграционный тест:

class UserFlowsTest < ActionDispatch::IntegrationTest 

Вот тест контроллера:

class UsersControllerTest < ActionController::TestCase 

Попробуйте rails new app скопировать автоматически сгенерированные хелперы и рамочные файлы и посмотреть примеры.