是否可以在MiniTest中运行单个测试?

Jos*_*ehl 158 ruby minitest ruby-on-rails-3

我可以在一个文件中运行所有测试:

rake test TEST=path/to/test_file.rb
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在该文件中只运行一个测试,我该怎么做?

我正在寻找类似的功能:

rspec path/to/test_file.rb -l 25
Run Code Online (Sandbox Code Playgroud)

jdu*_*uan 200

命令应该是:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
Run Code Online (Sandbox Code Playgroud)

  • +1 - 这就是你想要做的.如果要测试特定文件中的所有测试,只需离开`TESTOPTS = ...` (6认同)
  • `-v` 有什么作用? (2认同)

And*_*imm 145

你有没有尝试过:

ruby path/to/test_file.rb --name test_method_name
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.您不需要引入gem依赖项来执行此操作. (14认同)
  • 使用`ruby -Itest path/to/tc_file.rb --name test_method_name`,如http://stackoverflow.com/a/15714985/327786 (11认同)
  • 使用Minispec进行测试怎么样,定义为`define {}`?那些只是显示为`test_0001_anonymous` ...如果在多个描述块中使用相同的语法,可能会有多个`test_0001_anonymous'...在这种环境中运行单个测试的任何建议? (9认同)
  • 它说'无法加载这样的文件 - test_helper`. (4认同)
  • `捆绑 exec ruby​​ -I lib 路径/到 --name test_fit` (2认同)

fgu*_*len 50

这是string name definition在测试中困扰我的事情之一.

当你有:

def test_my_test
end
Run Code Online (Sandbox Code Playgroud)

你总是知道你的测试是如何命名的,所以你可以像这样执行它:

ruby my_test -n test_my_test
Run Code Online (Sandbox Code Playgroud)

但是当你有类似的东西:

it "my test" do
end
Run Code Online (Sandbox Code Playgroud)

你永远不确定这个测试是如何在内部命名的,所以你不能-n直接使用该选项.

要知道如何在内部命名此测试,您只能选择:执行整个文件以尝试查找日志.

我的解决方法是(暂时)添加一些非常独特的测试名称:

it "my test xxx" do
end
Run Code Online (Sandbox Code Playgroud)

然后使用'-n'参数的RegEx版本,如:

ruby my_test.rb -n /xxx/
Run Code Online (Sandbox Code Playgroud)

  • 正则表达式版本的-n参数是离合器的信息,谢谢! (5认同)

ran*_*mor 49

无需宝石: ruby -Itest test/lib/test.rb --name /some_test/

资料来源:http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9


Ell*_*ler 43

我正在寻找与rspec path/to/file.rb -l 25类似的功能

对!使用Nick Quaranto的"m"宝石.有了它你可以说:

m spec/my_spec.rb:25
Run Code Online (Sandbox Code Playgroud)

  • 当心!`m` [目前不适用于Minitest 5.0](https://github.com/qrush/m/issues/35). (14认同)
  • 虽然答案有效并且正是所要求的:-)运行单个测试的迷你测试方式是通过名称匹配(参见Grimm先生的回答).如果你已经尝试过并拒绝了它,那么就该尝试非标准的替代品了 - 比如Nick's Gem. (4认同)
  • 是的,我同意.我实际上希望你让你也传入-n作为一个选项...或者MiniTest只支持使用行号和方法名称. (3认同)

Der*_*ill 26

如果您使用MiniTest和Rails 5,在单个文件中运行所有测试的最佳方法是:

bin/rails test path/to/test_file.rb
Run Code Online (Sandbox Code Playgroud)

对于单个测试(例如,在第25行):

bin/rails test path/to/test_file.rb:25
Run Code Online (Sandbox Code Playgroud)

请参阅http://guides.rubyonrails.org/testing.html#the-rails-test-runner

  • 仅供参考,这在 Rails 5.0.7 中对我不起作用。无论我输入什么行号,该命令最终都会运行文件中的所有测试。 (2认同)

tuh*_*haj 22

您可以使用它来运行单个文件:

rake test TEST=test/path/to/file.rb
Run Code Online (Sandbox Code Playgroud)

我也用过

ruby -I"lib:test" test/path/to/file.rb
Run Code Online (Sandbox Code Playgroud)

为了更好的显示.


Ale*_*sky 11

有两种方法可以做到:

  1. "手动"运行测试(参见Andrew Grimm的回答).
  2. Hack Rake::TestTask目标使用不同的测试加载器.

Rake::TestTask(来自耙0.8.7)理论上是能够通过额外的选项,以MiniTest::Unit"TESTOPTS=blah-blah"命令行选项,例如:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name test_foobar1 -v"

在实践中,--name由于rake内部,选项(测试名称的过滤器)将不起作用.要解决这个问题,你需要在你的Rakefile中编写一个小猴子补丁:

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}
Run Code Online (Sandbox Code Playgroud)

此修补程序要求您创建文件test/my-minitest-loader.rb:

ARGV.each { |f|
  break if f =~ /^-/
  load f
}
Run Code Online (Sandbox Code Playgroud)

要打印Minitest的所有可能选项,请键入

% ruby -r minitest/autorun -e '' -- --help

  • 请注意,最初的示例可以使用更新的`rake`(0.9.2)正常工作,并且不需要猴子补丁. (3认同)

Rim*_*ian 9

你实际上可以只运行名称甚至数字:

-n, --name PATTERN               Filter run on /regexp/ or string.
Run Code Online (Sandbox Code Playgroud)

例如:

$ ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil
Run Code Online (Sandbox Code Playgroud)

请参阅:https://github.com/seattlerb/minitest