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

有两种方法可以做到这一点:

  • “手动”运行测试(参见Andrew Grimm的答案)
  • Hack
    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