从Rails 3.2升级到Rails 4后,我的应用程序正常运行,但我用测试单元编写的测试是一场灾难。
传言Minitest与测试单元“兼容”。但是,如果我尝试使用(现在捆绑的)Minitest,那么存在一系列差异 - 从断言*语句名称和参数到(很明显)许多其他大事和微妙的事情。如果我试图避免使用Minitest并尝试将我的测试单元宝石保存在我的Gemfile中,则rake测试会爆炸,说,
undefined method 'refute_predicate' for class 'ActiveSupport::TestCase'
这是因为调用了
require 'rails/test_help'
:(
我一直在寻找一段时间,但还没有想出任何继续使用测试单元的方法。唯一的替代方案似乎是(对我们来说,大规模)重构我们的测试代码,因为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 :(得分:3)
你是否正在继承:Test :: Unit :: TestCase而不是ActiveSupport :: TestCase?
也许尝试将minitest_tu_shim添加到您的测试组:
https://github.com/seattlerb/minitest_tu_shim
或确保子类化ActiveSupport :: TestCase
答案 1 :(得分:0)
是Rails支持Test :: Unit。这是它的指南。
http://guides.rubyonrails.org/testing.html
使用全球搜索&替换测试用例以更改方法名称。
这是一个集成测试:
class UserFlowsTest < ActionDispatch::IntegrationTest
这是一个控制器测试:
class UsersControllerTest < ActionController::TestCase
尝试rails new app
复制自动生成的帮助程序和框架文件,并查看示例。