如何解决自动测试无限循环问题?

Dan*_*nor 12 rspec ruby-on-rails autotest cucumber

我正在使用黄瓜,rails3,rspec2和自动测试.我试图找出为什么我的功能无限循环.我怀疑在测试过程中有些文件正在被更改,但我不确定是哪一个.我添加了一些例外.autotest,没有骰子.

我可以采取任何措施来解决此问题吗?

如果我能看到哪些文件正在触发重新运行,或者在运行时看到正在观看/未观看的文件,那就太酷了.

这是我的.autotest内容

require 'autotest/growl'

Autotest::Growl::clear_terminal = false

# Skip some paths
Autotest.add_hook :initialize do |autotest|
    %w{.git .DS_store db log tmp rerun.txt}.each { |e| autotest.add_exception(e) }
end
Run Code Online (Sandbox Code Playgroud)

Dan*_*nor 15

好的,所以我明白了.我深入了解自动测试的来源,以便更好地了解正在发生的事情.它会在所有异常中创建一个Regexp.union,并忽略相对路径与编译表达式匹配的文件.

为了更好地理解我说在我的项目目录的一切错误.autotest除外./app,./lib,./public,./script,./spec./features.像这样的东西:

# .autotest - to troubleshoot
Autotest.add_hook :initialize do |at|
  at.add_exception(%r{^\./\.git})
  ...
  at.add_exception(%r{^\./db})
  ...
  at.add_exception(%r{^\./rerun.txt})
  ...
end
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我没有得到无限循环.之后我才开始评论每个例外情况.事实证明,我必须手动忽略的唯一文件是Gemfile.lock.由于某种原因,这要么被改变,要么将自动测试混淆到它使黄瓜循环的程度.

这样就.autotest解决了这个问题:

# .autotest - to fix
Autotest.add_hook :initialize do |at|
  # Gemfile.lock is causing cucumber to run infinitely. Don't watch it.
  at.add_exception(%r{^\./Gemfile.lock})
end
Run Code Online (Sandbox Code Playgroud)

我将报告黄瓜列表,让他们知道他们应该将其添加到内置的自动测试异常中.

  • 我试过除了Gemfile.lock但是没有做到这一点.我最终使用了以下内容:Autotest.add_hook:initialize do | at | %w {.svn .hg .git vendor rerun.txti db log tmp .DS_store Gemfile.lock} .each {| exception | at.add_exception(exception)}结束 (3认同)

Har*_*ove 7

只是想说一声谢谢.事实证明,对我来说,它是日志目录.我的.autotest文件看起来像这样.

# .autotest
Autotest.add_hook :initialize do |at|
  # Log directory is causing cucumber to run infinitely.
  at.add_exception(%r{^\./log})
end
Run Code Online (Sandbox Code Playgroud)

有关参考,请参阅http://github.com/aslakhellesoy/cucumber/wiki/Autotest-Integration中的 "自定义自动测试行为" ,其中讨论了无限循环问题.


Gus*_*dez 6

在Linux/Unix中,您可以使用以下命令:

$ find . -mmin -5
Run Code Online (Sandbox Code Playgroud)

找出在过去5分钟内修改了哪些文件(或任何适当的失效).这可以极大地帮助找到触发无限循环的文件.然后按照其他答案中的说明添加异常.

就我而言,罪魁祸首是webrat.log.


Jar*_*red 5

值得注意的是,您可以将-v传递给autospec/autotest,它会打印出触发它运行的内容.