2010-07-06 27 views
12

我正在使用黄瓜,rails3,rspec2和autotest。我试图找出为什么我的功能无限循环。我怀疑有些文件在测试过程中发生了变化,但我不确定哪一个文件。我已经为我的.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 

回答

15

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

为了更好地理解我说在我的项目的目录一切.autotest除了./app./lib./public./script./spec./features的bug。像这样:

# .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 

我要去黄瓜名单上的报告,让他们知道,他们应该添加到内置的自动检测异常。

+0

感谢您分享此内容。 – zetetic 2010-07-08 21:08:11

+3

我试过除Gemfile.lock外,但没有做到这一点。我结束了使用以下内容:Autotest.add_hook:初始化do | at | %w {.svn .hg .git vendor rerun.txti db log tmp .DS_store Gemfile.lock} .each {| exception | at.add_exception(例外)} end – localshred 2010-12-01 20:44:23

+0

告诉自动测试忽略'Gemfile.lock'为我工作。看起来像是在运行我的规格时,“Gemfile.lock”被改变了(我的'gem'capistrano''线的依赖关系在测试期间被改变了,然后又被放回......怪异的)。 – 2011-03-16 16:35:04

0

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

+0

好的我可以处理,但一旦我打破了我该如何检查Autotest?我不确定在哪里寻找,以便了解它的内部并了解它为什么正在做它正在做的事情。 – 2010-07-06 21:10:09

1

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

PS:它可能是rerun.txt,当你运行功能时,它会被Cucumber感动。

+0

使用git。状态报告没有任何改变(我可能忽略了被改变的文件,如果有的话)。我还为我的自动测试例外添加了rerun.txt。更新答案以包含我的.autotest内容。 – 2010-07-06 22:23:50

+0

虽然有趣的想法,我会尝试新的结帐和快速跟踪一切,看看是否有帮助。 – 2010-07-06 22:25:19

+0

被修改的2个文件(根据git)是db/test.sqlite3和log/test.log。似乎.autotest应该告诉自动测试不要看他们。我相信黄瓜铁轨也有内置的。我的.autotest看起来不对? – 2010-07-06 22:45:20

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“自定义自动测试行为”,其中谈到了无限循环的问题。

6

在的Linux/Unix您可以使用命令:

$ find . -mmin -5 

弄清楚在最后5分钟被修改哪些文件(或任何流逝appropiate)。这可以极大地帮助找到触发无限循环的文件。然后按照其他答案中的解释添加异常。

在我的情况下,罪魁祸首是webrat.log

5

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

+0

伟大的提示,谢谢! – 2012-09-04 09:51:11

+0

啊,至关重要的信息! – Felixyz 2013-01-22 10:12:37