【问题标题】:Zentest - How to stop automatic testing when redZentest - 如何在红色时停止自动测试
【发布时间】:2011-06-19 22:48:05
【问题描述】:

我正在尝试配置自动测试,以便当我运行我的测试套件并且我的测试失败时,自动测试会停止测试并等待我在再次测试之前进行更改。使用我当前的配置,自动测试在遇到失败的测试时会继续进行不确定的测试,这使得处理起来有点麻烦(每次测试失败时都必须进入终端并停止自动测试服务器)。

我正在使用 RSpec、Zentest 和 Spork 开发 Rails 应用程序。

相关宝石版本:

autotest (4.4.6)
rspec (2.6.0)
rspec-core (2.6.4)
rspec-expectations (2.6.0)
rspec-mocks (2.6.0)
rspec-rails (2.6.1)
spork (0.9.0.rc8)
ZenTest (4.5.0)

我的 .autotest 文件:

module Autotest::Notify
  def self.notify title, msg, img, pri='low', time=3000
    `notify-send -i #{img} -u #{pri} -t #{time} '#{msg}'`
  end

  Autotest.add_hook :ran_command do |autotest|
    results = [autotest.results].flatten.join("\n")
    output = results.slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+pending)?/)
    folder = "~/.autotest_icons/"
    if output  =~ /[1-9]\d*\sfailures?/
      notify "FAIL:", "#{output}", folder+"failed.png", 'critical', 10000
    elsif output  =~ /[1-9]\d*\spending?/
      notify "PENDING:", "#{output}", folder+"pending.png", 'normal', 10000
    else
      notify "PASS:", "#{output}", folder+"passed.png"
    end
  end
end

注意:我的大部分 .autotest 文件都是为了让在 linux 中工作的弹出窗口显示我的测试是通过还是失败。

我一直在寻找这个问题的答案,但没有运气,而且我发现很难获得一些关于 Autotest 的好文档。我已经盯着 Zentest 的 RDoc 看了很长一段时间了,我一定是错过了一些东西。

非常感谢任何帮助、示例链接等。

【问题讨论】:

  • 我想知道您的 .autotest 文件是否正在做一些事情来使其自动测试递归。我会尝试一次删除一个可能的原因。例如,从组合中删除spork,使用已知错误运行自动测试并查看它是否继续运行。如果是这样,请将您的.autotest 文件暂时移动到某个地方,在没有.autotest 文件的情况下有效地运行,然后重试。每当我遇到一个不明显的问题时,我都会尝试遍历逻辑链并进行一些小的更改,直到我可以隔离问题为止。
  • PS:自动测试不应该在给定代码更改后继续运行测试。它应该运行受影响的测试,报告结果(绿色或红色),然后停止并等待更多更改。您的配置中有问题导致此异常。
  • 感谢您的回复。老实说,这个问题似乎是相当随机的。我已经使用相同的配置运行了一段时间,并且自动测试只会在它们偶尔变红时重新运行测试(可能是 1/10 次)。我真的找不到我正在运行的测试和奇怪的自动测试行为之间的关系,但我会继续尝试。感谢您的建议,如果我最终得到明确的答案,那么我会发布它。我现在的主要问题是,每次我认为我已经修复它时,它的行为最终都会减少。
  • 有趣。如果你找到答案,我想看看答案。祝你好运。
  • 尝试使用“autotest -v”运行,它会显示是什么文件更改触发了重新运行。然后给 .autotest 添加一个例外。

标签: ruby-on-rails autotest spork rspec-rails zentest


【解决方案1】:

我遇到了同样的问题,发现我的开发服务器正在写入日志文件。在我将它添加到我的 .autotest 文件后,问题就消失了:

Autotest.add_hook :initialize do |at|
  at.add_exception(%r{^\./\.git})
  at.add_exception(%r{^\./log})
end

【讨论】:

    【解决方案2】:

    当我有一个 gem 将数据写入 ZenTest 正在监视的目录时,我看到了 ZenTest 的类似问题。 IIRC,它是一个进行全文搜索的 gem——搜索生成的索引文件触发 ZenTest 再次运行,从而重新生成索引。

    我通过修改 Growl 通知来跟踪问题,告诉我哪些文件触发了自动测试运行(当时我在 Mac 上运行)。

    解决方案是在 .autotest 文件中添加异常/排除项,告诉它忽略索引。

    (我刚刚看到:Spork is repeatedly re-running failing tests in autotest 这听起来与您的问题非常相似)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多