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

时间:2010-07-06 21:01:17

标签: ruby-on-rails rspec cucumber autotest

我正在使用黄瓜,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

6 个答案:

答案 0 :(得分:15)

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

为了更好地理解错误,我将项目目录中的所有内容添加到.autotest./app./lib./public./script,{{1} }和./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 。出于某种原因,要么将自动测试更改或混淆到使黄瓜循环的位置。

因此,这个Gemfile.lock解决了这个问题:

.autotest

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

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:6)

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

$ find . -mmin -5

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

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

答案 3 :(得分:5)

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

答案 4 :(得分:1)

将您的文件置于版本控制之下。运行自动测试,然后运行VC系统的状态命令(例如git status)以查看更改的内容。

PS:它可能是rerun.txt,每当你运行功能时,黄瓜会触及它。

答案 5 :(得分:0)

您可以使用ruby-debug。然后,您可以在代码中添加调试器语句并打破它们。