class Minitest::TestTask

Minitest::TestTask 是一个 rake 助手,它在主测试任务的命名空间下生成多个 rake 任务。

task <name>      :: the main test task
task <name>:cmd  :: prints the command to use
task <name>:deps :: runs each test file by itself to find dependency errors
task <name>:slow :: runs the tests and reports the slowest 25 tests.

示例

Minitest::TestTask.create

最基本和默认的设置。

Minitest::TestTask.create :my_tests

最基本/默认的设置,但带有自定义名称

Minitest::TestTask.create :unit do |t|
  t.test_globs = ["test/unit/**/*_test.rb"]
  t.warning = false
end

自定义名称并且只运行单元测试。

注意:要将此任务连接到默认任务,请将其设置为依赖项

task default: :unit

属性

extra_args[RW]

传递给测试的额外参数。默认为空,但会由一些环境变量填充

N (-n 标志)

要运行的测试的字符串或正则表达式。

X (-e 标志)

要排除的测试的字符串或正则表达式。

A (arg)

注入任意参数的快捷方式(例如 A=--help)。

请参阅 process_env

framework[RW]

加载框架的代码。默认为需要 minitest/autorun...

我为什么将其作为一个选项?

libs[RW]

要包含的额外库目录。默认为 %w[lib test .]。 还使用 $MT_LIB_EXTRAS,允许您为自定义运行动态覆盖/注入目录。

name[RW]

任务的名称和生成的其他任务的基本名称。

test_globs[RW]

用于查找测试文件的文件 glob。默认为在 test 目录下查找测试文件的合理值。

test_prelude[RW]

可选:在加载测试框架之前运行的额外 ruby 代码。

verbose[RW]

在命令运行时输出它们。默认为 Rake 的 trace (-t 标志) 选项。

warning[RW]

打开 ruby 警告 (-w 标志)。默认为 true。

公共类方法

create(name = :test, &block) 点击以切换源代码

name 下创建多个面向测试的任务。接受一个可选的块来自定义变量。

# File minitest-5.25.4/lib/minitest/test_task.rb, line 50
def self.create name = :test, &block
  task = new name
  task.instance_eval(&block) if block
  task.process_env
  task.define
  task
end

公共实例方法

make_test_cmd(globs = test_globs) 点击以切换源代码

生成测试命令行。

# File minitest-5.25.4/lib/minitest/test_task.rb, line 259
def make_test_cmd globs = test_globs
  tests = []
  tests.concat Dir[*globs].sort.shuffle # TODO: SEED -> srand first?
  tests.map! { |f| %(require "#{f}") }

  runner = []
  runner << test_prelude if test_prelude
  runner << framework
  runner.concat tests
  runner = runner.join "; "

  args  = []
  args << "-I#{libs.join File::PATH_SEPARATOR}" unless libs.empty?
  args << "-w" if warning
  args << "-e"
  args << "'#{runner}'"
  args << "--"
  args << extra_args.map(&:shellescape)

  args.join " "
end
process_env() 点击以切换源代码

从环境中提取变量并将它们转换为命令行参数。请参阅 extra_args

环境变量

MT_LIB_EXTRAS

用于自定义运行动态覆盖/注入的额外库。

N

要运行的测试(字符串或/regexp/)。

X

要排除的测试(字符串或/regexp/)。

A

任何额外的参数。遵守 shell 引号。

已弃用

TESTOPTS

对于参数传递,请使用 A

N

对于并行测试,请使用 MT_CPU

FILTER

TESTOPTS 相同。

# File minitest-5.25.4/lib/minitest/test_task.rb, line 144
def process_env
  warn "TESTOPTS is deprecated in Minitest::TestTask. Use A instead" if
    ENV["TESTOPTS"]
  warn "FILTER is deprecated in Minitest::TestTask. Use A instead" if
    ENV["FILTER"]
  warn "N is deprecated in Minitest::TestTask. Use MT_CPU instead" if
    ENV["N"] && ENV["N"].to_i > 0

  lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR
  self.libs[0, 0] = lib_extras

  extra_args << "-n" << ENV["N"]                      if ENV["N"]
  extra_args << "-e" << ENV["X"]                      if ENV["X"]
  extra_args.concat Shellwords.split(ENV["TESTOPTS"]) if ENV["TESTOPTS"]
  extra_args.concat Shellwords.split(ENV["FILTER"])   if ENV["FILTER"]
  extra_args.concat Shellwords.split(ENV["A"])        if ENV["A"]

  ENV.delete "N" if ENV["N"]

  # TODO? RUBY_DEBUG = ENV["RUBY_DEBUG"]
  # TODO? ENV["RUBY_FLAGS"]

  extra_args.compact!
end