如何使Minitest在出现错误时停止执行?

13

我正在使用Minitest作为我的功能测试运行器,使用Selenium作为驱动程序来运行浏览器。每个测试都被建模为MiniTest :: Unit :: TestCase。

Minitest在完成所有测试的执行时报告执行摘要。遇到的异常也会在执行结束时打印出来。当发生意外故障时,我发现很难调试,因为执行的上下文已丢失。我遇到的异常不是确定性的。

是否有一种方法可以让Minitest运行器在异常或断言失败时停止测试的执行?

我正在使用minitest(2.11.2)和ruby 1.9.2p290(2011-07-09)[i386-mingw32]

5个回答

4
尝试运行 rails test -f 命令。它的意思是在第一个失败或错误时中止测试运行。

1
这个选项在Rails 5的帮助文本中出现,但似乎没有任何作用。 - Glenn

3
我认为你想要一个“快速失败”选项。我找到了fail_fast for minitest (Test::Unit): Immediate backtrace & exit这篇文章,但已经过时(仍然介绍了可以做的事情)。我认为你需要猴子补丁测试库以启用此选项。我找到了一个Gist,展示了如何add a simple fail-fast option to minitest/turn/minitest-rails,这可能会让你走上正确的轨道。我理解你的问题与我引用的第一篇文章有关:

当我通过rake test在我的Ruby on Rails 3项目中运行Test::Unit套件并且测试失败时,默认行为是只打印“F”或“E”,继续运行直到所有测试完成(而我无聊地转动拇指),然后才打印出堆栈跟踪。


2

如我在这里所回答的那样,我发现了一个适用于Rails 4.2和Minitest 5.6.1的gem:minitest-fail-fast


1

使用 -f

在纯 Ruby 中,这意味着 ruby <file> -f

在 Rails 中,这意味着 rails test -f

Minitest 将检查终端参数中的 -f 标志,因此您调用它的方式似乎与 -f 标志无关。


1

这并没有直接回答问题,但可能非常有用。

你可以使用pry-rescue gem,这样当出现问题时,你的测试将启动一个pry会话。你只需要将gem添加到你的Gemfile中:

group :development, :test do
  gem 'pry-rescue'
end

然后使用以下标记启动您的测试:

PRY_RESCUE_RAILS=1 rails test rails test test/integration/agendas_test.rb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接