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
4

6 に答える 6

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

これを行ったとき、無限ループは発生しませんでした。その後、各例外をコメントアウトし始めました。結局のところ、手動​​で無視しなければならなかった唯一のファイルはGemfile.lock. なんらかの理由で、これは変更されているか、自動テストを混乱させて、cucumber ループを作成しています。

したがって、これ.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 の「Autotest Behavior のカスタマイズ」を参照してください。ここでは、無限ループの問題について説明しています。

于 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

ファイルをバージョン管理下に置きます。autotest を実行してから、VC システムのステータス コマンド (例: git status) を実行して、何が変化したかを確認します。

PS: おそらくrerun.txt、機能を実行するたびに Cucumber によって影響を受けるのは です。

于 2010-07-06T22:10:06.553 に答える
0

ruby-debugを使用できます。次に、コードにデバッガー ステートメントを追加して、それらを中断することができます。

于 2010-07-06T21:06:07.473 に答える