如何设置MiniTest?
我是一个相当新手的testing人员,但一直试图在Rails中改进TDD。
RSpec很好,但我的testing很慢。 我听说MiniTest的速度要快很多,MiniTest / Spec DSL看起来和我以前使用RSpec的方式非常相似,所以我想我会试试看。
但是,我一直无法在网上find任何提供如何设置和运行Minitest的演练。 我学会了如何从RSpec书中进行testing,我不知道Test :: Unit或者MiniTest应该如何工作。 我在gemfile中有gem,我已经写了一些简单的testing,但是我不知道把它们放在哪里以及如何运行它们。 我认为这是那些显而易见的事情之一,没人打扰写下来。
任何人都可以向我解释如何设置一些Minitest / spec文件,并让他们运行,所以我可以比较性能与Rspec?
编辑
具体来说,这些是我最需要知道的基础知识:
- 你需要一个test_helper文件(如spec_helper),如果是的话,你如何创build它?
- 你如何运行微型? 似乎没有等同于
rspec spec
或rspec 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文件的顶部。