ruby-on-rails - Rails 2.3 和 minitest

标签 ruby-on-rails ruby minitest

我想用现有的 Rails 2.3.14 应用程序尝试 minitest。我已经尝试了几种方法,但似乎都不起作用。

本质上可以归结为这一点。当我将 minitest 添加到 Gemfile 时,我使用 bundle exec rake test 运行的所有测试都不会使用 minitest 执行。

问题是大多数测试用例扩展了 ActiveSupport::Testcase 或 ActionController::Testcase(它扩展了 ActiveSupport::TestCase)。

通过查看此类的代码,我发现它已经(以某种方式)支持 MiniTest:

class TestCase < ::Test::Unit::TestCase
    if defined? MiniTest
      Assertion = MiniTest::Assertion
      alias_method :method_name, :name if method_defined? :name
      alias_method :method_name, :__name__ if method_defined? :__name__
    else
...
end

(完整代码参见 https://github.com/rails/rails/blob/2-3-stable/activesupport/lib/active_support/test_case.rb)

我的问题是:

是否可以在 Rails 2.3 中使用 minitest 而不是 test::unit 而不必扩展 (MiniTest::Unit::TestCase)

最佳答案

任何测试框架都由两部分组成,一种是定义和运行测试的方法(称之为测试运行器),另一种是断言框架。

查看 ActiveSupport 似乎如果完全定义了 MiniTest,则运行 rails 单元测试运行程序将默认使用 MiniTest 的断言类。这意味着您可以使用 Minitest 的断言语法。

定义 MiniTest 应该只是需要 'minitest\unit' 的情况。

但是,如果您想使用运行器,则需要从 MniTest 框架测试夹具基类派生。

railscasts 中有一步一步的演练。用于自行设置。

归结为:

  1. 从您的 config/applications.rb 中删除 test_unit
  2. 将 minitest gem 添加到您的 gem 文件“Gemfile”
  3. 在可以包含在测试中的帮助文件中设置环境
  4. 添加一个 rake 任务来运行测试。 (/lib/tasks/minitest.rake)

Railscasts有详细信息。

如果你不想改变你现有的测试来做到这一点.. 那么你必须猴子补丁 Test::Unit 来重新定义 TestCase 为选择的 MiniTest 基类或派生自一个的东西。这是this gem的方法接受并且可能会给你一些关于如何最好地去做的想法。

另一种解决方案是通过您的代码进行搜索/替换以切换测试用例的基类。

希望对您有所帮助。


我更新了我的答案并删除了以下过时的内容:

minitest-rails 已被正确指出,因为它仅适用于 Rails 3.1。

This gem似乎很旧(2009 年 3 月 26 日),但它可能会有所帮助。如果您需要提示来执行类似操作,请检查源代码。

关于ruby-on-rails - Rails 2.3 和 minitest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817331/

相关文章:

ruby-on-rails - 使用带有 RSpec 的设计测试 View

ruby-on-rails - rails : running rake task in cron job

ruby-on-rails - Passenger Standalone 不会在触摸 restart.txt 时重新启动

mysql - 在 Ruby on Rails 中动态连接到第二个 MySQL 数据库

ruby-on-rails - 为什么 yield 不将结果传递给 block (Rails)?

ruby - 为什么我的 Minitest 测试没有并行运行?

ruby-on-rails - 使用错误版本的 Ruby 部署 capistrano

ruby - 如何解释 Ruby "end"调用方法

ruby-on-rails - Rails 4 + Devise : How to write a test for Devise Reset Password without RSpec?

ruby - Minitest:如何测试方法