10

从 Rails 3.2 升级到 Rails 4 后,我的应用程序可以工作,但是我用 test-unit 编写的测试是一场灾难。

传闻 Minitest 与测试单元“兼容”。但是,如果我尝试使用(现在捆绑的)Minitest,会有很多差异 - 从 assert* 语句名称和参数到(显然)许多其他大而微妙的东西。

如果我尝试避免 Minitest 并尝试将我的测试单元 gem 保留在我的 Gemfile 中,rake 测试会爆炸,说,

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

这是由于调用了

require 'rails/test_help'

:(

我一直在寻找一段时间,但还没有找到继续使用测试单元的任何方法。唯一的选择似乎是(对我们来说,大规模的)重构我们的测试代码,因为 Minitest 与测试单元的不兼容性以某种方式破坏了我们 80% 的测试。

然而阅读即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 中使用测试单元?

4

2 回答 2

3

Are you subclassing: Test::Unit::TestCase and not ActiveSupport::TestCase?

Maybe try adding minitest_tu_shim to your test group:

https://github.com/seattlerb/minitest_tu_shim

or make sure to subclass ActiveSupport::TestCase

于 2013-07-24T20:20:15.843 回答
0

是的 Rails 支持 Test::Unit。这是它的指南。

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

在您的测试用例上使用全局搜索和替换来更改方法名称。

这是一个集成测试:

class UserFlowsTest < ActionDispatch::IntegrationTest

这是一个控制器测试:

class UsersControllerTest < ActionController::TestCase

尝试rails new app复制自动生成的帮助程序和框架文件并查看示例。

于 2014-06-01T04:20:43.310 回答