我可以在一个文件中运行所有测试:
rake test TEST=path/to/test_file.rb
但是,如果我只想在该文件中运行一个测试,我该怎么做?
我正在寻找与以下类似的功能:
rspec path/to/test_file.rb -l 25
我可以在一个文件中运行所有测试:
rake test TEST=path/to/test_file.rb
但是,如果我只想在该文件中运行一个测试,我该怎么做?
我正在寻找与以下类似的功能:
rspec path/to/test_file.rb -l 25
命令应该是:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
你有没有尝试过:
ruby path/to/test_file.rb --name test_method_name
不需要宝石:
ruby -Itest test/lib/test.rb --name /some_test/
来源:http ://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9
string name definition
这是在测试中困扰我的事情之一。
当你有:
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/
如果您在 Rails 5+ 中使用 MiniTest,在单个文件中运行所有测试的最佳方法是:
bin/rails test path/to/test_file.rb
对于单个测试(例如第 25 行):
bin/rails test path/to/test_file.rb:25
见http://guides.rubyonrails.org/testing.html#the-rails-test-runner
您可以使用它来运行单个文件:
rake test TEST=test/path/to/file.rb
我也用过
ruby -I"lib:test" test/path/to/file.rb
以获得更好的显示效果。
有两种方法可以做到:
Rake::TestTask
目标以使用不同的测试加载器。Rake::TestTask
(从 rake 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
}
此补丁要求您创建一个文件test/my-minitest-loader.rb
:
ARGV.each { |f|
break if f =~ /^-/
load f
}
要打印 Minitest 的所有可能选项,请键入
% ruby -r minitest/autorun -e '' -- --help
您可以通过--name
其名称或名称中的数字来运行测试:
-n, --name PATTERN Filter run on /regexp/ or string.
例如:
$ ruby spec/stories/foo_spec.rb --name 3
FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil
此标志记录在 Minitest 的 README中。
如果您将 Turn gem 与 minitest 一起使用,请确保使用Turn.config.pattern
选项,因为 Turn Minitest 运行器不尊重 ARG 中的 --name 选项。
我正在寻找与以下类似的功能:
rspec 路径/到/test_file.rb -l 25
有一个宝石可以做到这一点:minitest-line
.
gem install minitest-line
ruby test/my_file -l 5
我用ruby /path/to/test -n /distinguishable word/
编辑:
-n
是--name
. distinguishable word
可以是您在测试描述中输入的任何字符串,我通常使用一些我知道不会出现在其他测试描述中的随机词。
以下将起作用
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
我在 Rails 版本4.2.11.3和 Ruby 版本2.4.7p357
下面一个对我有用。
ruby -Itest <relative_minitest_file_path> --name /<test_name>/
安装 gem minitest-focus并使用关键字 focus on test/spec 如下所示仅运行特定测试。
focus
def test
end
focus
it "test" do
end
这不需要传递任何命令行参数。