是否仍然可以在导轨4中使用测试单元?

时间:2013-07-24 19:46:49

标签: ruby-on-rails ruby ruby-on-rails-4 testunit minitest

从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中使用测试单元?

2 个答案:

答案 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复制自动生成的帮助程序和框架文件,并查看示例。