我是一个相当新手的测试人员,但一直在努力提高Rails中的TDD.

RSpec工作得很好,但我的测试相当慢.我听说MiniTest要快得多,MiniTest/Spec DSL看起来与我习惯于使用RSpec的方式非常相似,所以我想试试.

然而,我在网上找不到任何关于如何设置和运行Minitest的演练.我从RSpec的书中学会了如何测试,我不知道test::Unit或MiniTest应该如何工作.我的gem文件中有gem,我编写了一些简单的测试,但我不知道把它们放在哪里,也不知道如何运行它们.我觉得这是很明显的事情之一,没人愿意写下来...

有人能给我解释一下如何设置一些Minitest/spec文件并运行它们,这样我就可以比较Rspec的性能了吗?

EDIT

具体来说,以下是我最需要了解的基本知识:

  1. 你需要一个测试辅助文件(比如spec\u helper)吗?如果需要,你如何创建它?
  2. How do you run minitest?似乎不等于rspec specrspec path/to/file_spec.rb,我缺少什么?

谢谢

推荐答案

这个问题类似于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

你可以跑

  • all tests: rake test
  • one 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'
  • all tests: rake test
  • one test: ruby -Ilib -Ispec spec/alpha_spec.rb

Ruby-on-rails相关问答推荐

查询Where Date.parse Rails

Rails 创建自定义函数/方法以及存储位置

这种使用on:的语法在 Ruby on Rails 中意味着什么?

在 Rails 中进行 Http 基本身份验证

Rails:关于yields

NameError:未定义的局部变量或方法记录器

Rails 中的转义值(类似于 mysql_real_escape_string())

Rails 4,使用 ActiveRecord 的原始查询

如何在 Ruby on Rails 中的 cookie 上设置 HttpOnly 标志

如何在 RoR 中实现成就系统

在 Rails 中将表格行变成链接

遇到在早期版本的 Rails 中使用 attr_accessible 的情况时,Rails 4 中的禁止属性错误

如何禁用 HTTP 严格传输安全性?

表单中的第一个参数不能包含 nil 或为空 - Rails 4

Rails,设计认证,CSRF 问题

Ruby中的参数化获取请求?

Ruby on Rails:如何为 postgresql 编辑 database.yml?

如何设置 MiniTest?

将新管理员添加到活动管理员

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?