193

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

rake test TEST=path/to/test_file.rb

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

我正在寻找与以下类似的功能:

rspec path/to/test_file.rb -l 25
4

15 回答 15

231

命令应该是:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
于 2012-05-18T20:50:18.277 回答
162

你有没有尝试过:

ruby path/to/test_file.rb --name test_method_name
于 2011-03-13T22:24:19.207 回答
59

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

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

于 2013-03-30T04:31:22.107 回答
51

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/
于 2012-02-16T11:28:12.447 回答
46

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

使用Nick Quaranto 的 "m" gem,您可以说:

m spec/my_spec.rb:25
于 2012-04-26T06:44:06.487 回答
38

如果您在 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

于 2016-08-29T07:04:02.350 回答
25

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

rake test TEST=test/path/to/file.rb

我也用过

ruby -I"lib:test" test/path/to/file.rb

以获得更好的显示效果。

于 2014-03-27T12:30:40.397 回答
12

有两种方法可以做到:

  1. “手动”运行测试(参见 Andrew Grimm 的回答)。
  2. 破解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
于 2011-04-25T09:17:37.230 回答
12

您可以通过--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中。

于 2014-08-13T03:49:01.063 回答
1

如果您将 Turn gem 与 minitest 一起使用,请确保使用Turn.config.pattern选项,因为 Turn Minitest 运行器不尊重 ARG 中的 --name 选项。

于 2012-07-24T11:01:54.093 回答
1

我正在寻找与以下类似的功能:

rspec 路径/到/test_file.rb -l 25

有一个宝石可以做到这一点:minitest-line.

gem install minitest-line
ruby test/my_file -l 5

来自https://github.com/judofyr/minitest-line#minitest-line

于 2016-09-21T21:16:57.137 回答
1

我用ruby /path/to/test -n /distinguishable word/

编辑: -n--name. distinguishable word可以是您在测试描述中输入的任何字符串,我通常使用一些我知道不会出现在其他测试描述中的随机词。

于 2019-03-18T07:25:33.373 回答
1

以下将起作用

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
于 2019-06-07T07:07:13.770 回答
0

我在 Rails 版本4.2.11.3和 Ruby 版本2.4.7p357

下面一个对我有用。

ruby -Itest <relative_minitest_file_path> --name /<test_name>/
于 2021-09-06T11:44:45.560 回答
0

安装 gem minitest-focus并使用关键字 focus on test/spec 如下所示仅运行特定测试。

focus
def test
end


focus
it "test" do
end

这不需要传递任何命令行参数。

于 2022-02-08T11:27:40.160 回答