如何设置MiniTest?

时间:2011-07-16 03:40:28

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

我是一个相当新手的测试人员,但一直试图在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,我缺少什么?
  3. 谢谢!

7 个答案:

答案 0 :(得分:40)

此问题与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

答案 1 :(得分:4)

您使用的是哪个版本的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设置。您为新模型编写了一个测试用例,它会自动运行并失败。然后,无论何时保存关联模型,该测试用例都会很快重新运行。你会得到关于你是否是红色/绿色的即时反馈。

他们在设置和表现良好方面都有点棘手,所以如果你遇到困难,请回过头来看看。

祝你好运!

答案 2 :(得分:4)

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

$ ruby myfileoftests.rb

答案 3 :(得分:3)

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

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

本演练演示了如何创建帮助文件以及如何使用rake任务运行测试。如果要运行特定测试,可以使用以下命令执行此操作:

ruby -Itest test/models/user_test.rb

答案 4 :(得分:1)

较新版本的RSpec(自2012年1月发布2.8以来)速度急剧提升。 Here是对性能差异的探索以及与MiniTest的比较。

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

答案 5 :(得分:1)

这是我的整个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文件。 (不得不安装宝石minitest-记者):

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

我只需要require_relative './minitest_helper'位于每个测试文件的顶部。

答案 6 :(得分:0)

帕特里克(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