12

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

6 回答 6

15

好的,所以我想通了。我深入研究了 autotest 的源代码,以便更好地了解正在发生的事情。它从所有异常中创建一个 Regexp.union 并忽略相对路径与编译表达式匹配的文件。

为了更好地理解这个错误,我将项目目录中的所有内容都添加到了.autotestexcept ./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

当我这样做时,我没有得到无限循环。之后,我才开始注释掉每个异常。事实证明,我必须手动忽略的唯一文件是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

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

于 2010-07-08T16:31:31.593 回答
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中的“自定义自动测试行为” ,其中讨论了无限循环问题。

于 2010-12-09T22:16:38.287 回答
6

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

$ find . -mmin -5

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

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

于 2011-04-21T03:14:27.537 回答
5

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

于 2012-02-28T02:29:37.307 回答
1

将您的文件置于版本控制之下。运行自动测试,然后运行您的 VC 系统的状态命令(例如git status)以查看发生了什么变化。

PS:它可能rerun.txt是 Cucumber 每次运行功能时都会触及的。

于 2010-07-06T22:10:06.553 回答
0

您可以使用ruby​​-debug。然后,您可以在代码中添加调试器语句并对其进行中断。

于 2010-07-06T21:06:07.473 回答