Ruby 是否可以在MiniTest中运行单个测试?
我可以在一个文件中运行所有测试,包括:Ruby 是否可以在MiniTest中运行单个测试?,ruby,ruby-on-rails-3,minitest,Ruby,Ruby On Rails 3,Minitest,我可以在一个文件中运行所有测试,包括: rake test TEST=path/to/test_file.rb 但是,如果我只想在该文件中运行一个测试,我该如何做呢 我正在寻找类似的功能: rspec path/to/test_file.rb -l 25 您是否尝试过: ruby path/to/test_file.rb --name test_method_name 有两种方法可以做到这一点: “手动”运行测试(参见Andrew Grimm的答案) HackRake::TestTaskt
rake test TEST=path/to/test_file.rb
但是,如果我只想在该文件中运行一个测试,我该如何做呢
我正在寻找类似的功能:
rspec path/to/test_file.rb -l 25
您是否尝试过:
ruby path/to/test_file.rb --name test_method_name
有两种方法可以做到这一点:
Rake::TestTask
target使用不同的测试加载程序Rake::TestTask
(来自Rake 0.8.7)理论上可以通过“TESTOPTS=blah blah”
命令行选项将附加选项传递给MiniTest::Unit
,例如:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name test_foobar1 -v"
此修补程序要求您创建一个文件test/my minitest loader.rb
:
ARGV.each { |f|
break if f =~ /^-/
load f
}
要打印Minitest的所有可能选项,请键入
% ruby -r minitest/autorun -e '' -- --help
%ruby-r minitest/autorun-e''--help这是困扰我的关于测试中
字符串名称定义的问题之一
如果您有:
def test_my_test
end
您始终知道测试的名称,因此可以按如下方式执行:
ruby my_test -n test_my_test
但是当你有这样的事情:
it "my test" do
end
您永远无法确定此测试的内部名称,因此不能直接使用-n
选项
要知道这个测试是如何在内部命名的,您只有一个选项:执行整个文件以尝试在日志中查找
我的解决方法是(暂时)在测试名称中添加一些非常独特的内容,如:
it "my test xxx" do
end
然后使用'-n'参数的正则表达式版本,如:
ruby my_test.rb -n /xxx/
我正在寻找与rspecpath/to/file.rb-l25类似的功能
是的!使用。有了它,你可以说:
m spec/my_spec.rb:25
命令应为:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
如果您将Turn gem与minitest一起使用,只需确保使用Turn.config.pattern
选项,因为Turn minitest runner不尊重ARGs中的--name选项。不需要gem:
ruby-Itest test/lib/test.rb--name/some\u test/
来源:您可以使用此选项运行单个文件:
rake test TEST=test/path/to/file.rb
我也用过
ruby -I"lib:test" test/path/to/file.rb
为了更好地显示。您可以通过--name
通过名称或名称中的数字运行测试:
-n,--name模式过滤器在/regexp/或字符串上运行。
e、 g:
$ruby spec/stories/foo_spec.rb——名称3
失败(0:00:00.022)测试\u 0003\u有foo
预期:“foo”
实际:零
此标志已记录在案。如果在Rails 5+中使用MiniTest,则在单个文件中运行所有测试的最佳方法是:
bin/rails test path/to/test_file.rb
对于单个测试(如第25行):
看
我正在寻找类似的功能:
rspec path/to/test_file.rb -l 25
rspec path/to/test_file.rb-l 25
有一个gem正好做到这一点:minitest行
gem install minitest-line
ruby test/my_file -l 5
从中,我使用ruby/path/to/test-n/可分辨词/
编辑:
-n
是--name
的缩写可分辨词
可以是您在测试描述中输入的任何字符串,我通常使用一些我知道不会出现在其他测试描述中的随机词 以下操作将起作用
def test_abc
end
test "hello world"
end
这可以通过
bundle exec ruby -I test path/to/test -n test_abc
bundle exec ruby -I test path/to/test -n test_hello_word
对于使用Minispec的测试,定义为指定{}
?这些只显示为test\u 0001\u anonymous
。。。如果在多个描述块中使用相同的语法,则可能会有多个test\u 0001\u anonymous
s。。。在这种环境下运行单个测试有什么建议吗?“tc”代表“测试用例”使用ruby-Itest path/to/tc\u file.rb--name test\u method\u name
比如bundle exec ruby-I lib path/to--name test\u fit
注意,最初的示例确实可以正确地使用较新的rake
(0.9.2)当我尝试使用rake版本10.5.0时,TESTOPTS=“--name test\u foobar”
不起作用,但是TESTOPTS=“--name=test\u foobar”
works.regex版本的-n参数是关键信息,谢谢!请注意,您可以通过在当前正在执行的方法(在本例中是您的测试)的上下文中调用\uuuu方法\uuuu
来检查这一点。当前实现的结果类似于“不破坏我的东西”.gsub(“,”).prepend(“test”)
。然后运行,例如,ruby-Itest-test/integration/stuff\u flow\u test.rb--name-test\u不破坏我的东西
。而答案是有效的,并且正是被问到的:-)运行单个测试的迷你测试方法是通过名称匹配(见格里姆先生的答案)。如果你已经尝试过了,但拒绝了,那么是时候尝试非标准的替代品了——比如尼克的宝石。没错,我同意。我真的希望m也能让你通过-n作为一个选项。。。或者MiniTest只支持使用行号和方法名。注意m
。虽然这个gem使运行单个测试的方式类似于rspec,但Minitest有一种内置的方式来运行单个测试,这正是问题所在。依赖关系不是必需的。很高兴知道配饰宝石会更容易(比如可能有很多)但我认为对于这个问题,来自jduan或randomor的纯迷你测试答案会更合适。这是我需要意识到的一点,那就是轮换是吞没名称
选项的原因。谢谢由于这一轮不再维持,我计划迁移到minitest reporters+1——这就是你想要做的。如果您想测试特定文件中的所有测试,只需保留TESTOPTS=…
awayVery-usefull答案。我让MinitestReporter在测试报告的末尾显示失败测试的重新运行命令。请看:-v
是做什么的?这应该是IMHO接受的答案。你能进一步解释一下吗?那个-n
参数是什么意思?它是--name
的缩写。只是为了方便。对于/regex/特别有用,我通常只是在测试名称中添加一些随机词(我知道这不会出现在其他测试的描述中)
bundle exec ruby -I test path/to/test -n test_abc
bundle exec ruby -I test path/to/test -n test_hello_word