如何设置MiniTest?

我是一个相当新手的testing人员,但一直试图在Rails中改进TDD。

RSpec很好,但我的testing很慢。 我听说MiniTest的速度要快很多,MiniTest / Spec DSL看起来和我以前使用RSpec的方式非常相似,所以我想我会试试看。

但是,我一直无法在网上find任何提供如何设置和运行Minitest的演练。 我学会了如何从RSpec书中进行testing,我不知道Test :: Unit或者MiniTest应该如何工作。 我在gemfile中有gem,我已经写了一些简单的testing,但是我不知道把它们放在哪里以及如何运行它们。 我认为这是那些显而易见的事情之一,没人打扰写下来。

任何人都可以向我解释如何设置一些Minitest / spec文件,并让他们运行,所以我可以比较性能与Rspec?

编辑

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

  1. 你需要一个test_helper文件(如spec_helper),如果是的话,你如何创build它?
  2. 你如何运行微型? 似乎没有等同于rspec specrspec path/to/file_spec.rb ,我错过了什么?

谢谢!

这个问题类似于如何使用minitest运行所有testing?

使用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 

你可以跑

  • 所有testing: rake test
  • 一个testing: ruby -Ilib spec/alpha_spec.rb

我不知道用spec_helper.rb使用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用以下replace冗余部分:

 require 'spec_helper' 
  • 所有testing: rake test
  • 一个testing: ruby -Ilib -Ispec spec/alpha_spec.rb

你使用的是什么版本的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


让你的testing更快运行是另一个黑暗的艺术。 看看spork和watchr 。 前者保持您的应用程序初始化,在每次运行testing套件之前重新载入修改过的文件和叉子。 后者会在您的仓库中查看文件中的更改,并自动运行相关的testing用例。

他们一起给你一个很平均的TDD设置。 你为你的新模型编写一个testing用例,它会自动运行并失败。 然后,无论何时保存关联的模型,该testing用例都会很快重新运行。 你接近即时反馈你是否是红色/绿色。

他们有一些棘手的问题,需要设置好,并且一起做得很好,所以如果遇到困难的话,请回答一些问题。

祝你好运!

请注意,看守或spork不是运行testing的要求。 他们为自动testing提供了方便。 但是可以运行一组MiniTesttesting的最基本的方法是使用ruby本身:

 $ ruby myfileoftests.rb 

查看minitest-rails的 入门video 。 它遍历了为Rails应用程序设置Minitest的过程。

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

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

 ruby -Itest test/models/user_test.rb 

较新版本的RSpec(自2012年1月发布2.8以来)有显着的提速。 以下是对性能差异的探索,并与MiniTest进行比较。

另外,我还发现了Ryan Bates的这个video短片,是对MiniTest的一个很好的介绍。 请注意,这是专业video之一,你需要订阅观看。

这里是我整个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输出,以及所有testing方法的名字,我在/ test目录下有minitest_helper.rb文件。 (必须安装gem微型记者):

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

我只需要require_relative './minitest_helper'在我的每个testing文件的顶部。