【问题标题】:How to set up MiniTest?如何设置 MiniTest?
【发布时间】:2011-07-16 03:40:28
【问题描述】:

我是一个相当新手的测试人员,但一直在努力在 Rails 中的 TDD 方面做得更好。

RSpec 效果很好,但我的测试很慢。我听说 MiniTest 速度要快得多,而且 MiniTest/Spec DSL 看起来与我习惯使用 RSpec 的方式非常相似,所以我想试试看。

但是,我无法在网络上找到任何提供如何设置和运行 Minitest 的演练。我从 RSpec 书中学习了如何测试,但我不知道 Test::Unit 或 MiniTest 应该如何工作。我的 gemfile 中有 gem,我编写了一些简单的测试,但我不知道将它们放在哪里或如何运行它们。我认为这是显而易见的事情之一,没有人会费心把它写下来......

谁能向我解释如何设置一些 Minitest/spec 文件并让它们运行,以便我可以将性能与 Rspec 进行比较?

编辑

具体来说,这些是我最需要了解的基础知识:

  1. 您是否需要一个 test_helper 文件(如 spec_helper),如果需要,您如何创建它?
  2. 你如何运行 minitest? 似乎没有与 rspec specrspec path/to/file_spec.rb 等效的东西,我错过了什么?

谢谢!

【问题讨论】:

  • 凯恩,谢谢。我看过这篇文章……不幸的是,它没有涵盖最基本的步骤:您是否需要一个 test_helper 文件(如 spec_helper),如果需要,您如何创建它?还有,如何运行 minitest?似乎没有等同于rspec specrspec path/to/file_spec.rb。这就是我真正坚持的。
  • 对于它的价值——这个问题已经获得了一些观点和喜爱,但没有人赞成。现在它在丛林中迷失了,如果你想看到这个问题得到回答,请投票,让它回到人们面前。
  • 请看blog.rawonrails.com/2012/01/… 这篇文章是关于如何使用分叉版本的 minitest-rails gem 来让 minitest 更好地与 rails 一起工作。
  • 也看看这个 SO 帖子stackoverflow.com/questions/10694355/…

标签: ruby-on-rails ruby-on-rails-3 rspec installation minitest


【解决方案1】:

这个问题类似于How to run all tests with minitest?

使用 Ruby 1.9.3 和 Rake 0.9.2.2,给定这样的目录布局:

Rakefile
lib/alpha.rb
spec/alpha_spec.rb

这是alpha_spec.rb 的样子:

require 'minitest/spec'
require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)

require 'alpha'

describe 'Alpha' do
  it 'greets you by name' do
    Alpha.new.greet('Alice').must_equal('hello, Alice')
  end
end

这里是Rakefile

require 'rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
end

你可以跑

  • 所有测试: rake test
  • 一次测试: ruby -Ilib spec/alpha_spec.rb

我不知道在 minitest 中使用 spec_helper.rb 是否常见。似乎没有一种方便的加载方法。将此添加到 Rakefile:

require 'rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
  t.libs.push 'spec'
end

那么spec/spec_helper.rb可以包含各种多余的东西:

require 'minitest/spec'
require 'minitest/autorun'
require 'alpha'

spec/alpha_spec.rb 将多余的部分替换为:

require 'spec_helper'
  • 所有测试: rake test
  • 一次测试: ruby -Ilib -Ispec spec/alpha_spec.rb

【讨论】:

    【解决方案2】:

    请注意,watchr 或 spork 不是运行测试的要求。它们为进行自动测试提供了便利。但是运行一组 MiniTest 测试的最基本方法是使用 ruby​​ 本身:

    $ ruby myfileoftests.rb
    

    【讨论】:

      【解决方案3】:

      您使用的是哪个版本的 Ruby?

      据我了解,1.9 引入了MiniTest,它完全取代了Test::Unit,并具有向后兼容的API。因此,如果您使用的是 1.9,并且您的 Rails 应用程序引用了Test::Unit,那么它实际上已经在使用MiniTest

      查看您的 Ruby 源代码 - test/unit.rb for 1.9.2 具有以下要求:

      require 'minitest/unit'
      require 'test/unit/assertions'
      require 'test/unit/testcase'
      

      test/unit/assertions 包括MiniTest::Assertions


      让你的测试运行得更快是一门完全不同的黑暗艺术。看看sporkwatchr。前者保持你的应用程序初始化,重新加载修改过的文件,并在每次运行测试套件之前分叉。后者监视您的存储库中的文件以进行更改,并自动运行它们相关的测试用例。

      它们共同为您提供了一个非常简单的 TDD 设置。您为新模型编写了一个测试用例,它会自动运行并失败。然后,每当您保存关联的模型时,该测试用例就会非常快速地重新运行。您几乎可以立即获得关于您是红/绿的反馈。

      他们都很难设置和表现得很好,所以如果你遇到困难,请回来查看更多问题。

      祝你好运!

      【讨论】:

        【解决方案4】:

        查看此getting started video 以获得minitest-rails。它介绍了为 Rails 应用程序设置 Minitest 的过程。

        http://www.youtube.com/watch?v=xA2f2zBNvsc

        演练展示了如何创建帮助文件以及如何使用 rake 任务运行测试。如果你想运行一个特定的测试,你可以这样做:

        ruby -Itest test/models/user_test.rb
        

        【讨论】:

          【解决方案5】:

          较新版本的 RSpec(自 2012 年 1 月发布的 2.8 版起)具有显着的速度提升。 Here是对性能差异的探索和与MiniTest的比较。

          另外,我发现 Ryan Bates 的 this 截屏视频是对 MiniTest 的精彩介绍。请注意,这是专业视频之一,您需要订阅才能观看。

          【讨论】:

            【解决方案6】:

            这是我的整个rakefile,我把它放在我的顶级目录中:

            task :default => :test
            task :test do
              Dir.glob('./test/*_test.rb').each { |file| require file}
            end
            

            要一次运行所有 Minitest 文件,我只需输入 rake。就是这样!

            确保在每个 Minitest 文件的顶部都有 require 'minitest/autorun'。 Dir.glob 绝对可以与 Minitest 一起使用。

            为了获得漂亮的彩色 Minitest 输出,以及我所有测试方法的名称,我的 /test 目录中有文件 minitest_helper.rb。 (必须安装 gem minitest-reporters):

            require 'minitest/reporters'
            Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
            require 'minitest/autorun'
            

            我只需要在每个测试文件的顶部添加require_relative './minitest_helper'

            【讨论】:

              【解决方案7】:

              Patrick 写了一个非常好的解释和例子。对于未来的读者,请注意,全球预期现在已贬值,并将在 Minitest 6 中删除。它需要在调用 expect 时包装您正在测试的东西进行几乎微不足道的更改。

              require 'minitest/spec'
              require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)
              
              require 'alpha'
              
              describe 'Alpha' do
                it 'greets you by name' do
                  expect(Alpha.new.greet('Alice')).must_equal('hello, Alice')
                end
              end
              

              【讨论】:

                猜你喜欢
                • 2021-10-11
                • 2015-12-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-10-09
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多