2013-03-14 5 views
5

私は(OS-X上で)開発中のレールアプリケーションで、私はますます頻繁にロックするrspec経由でテストスイートを実行していることを発見しています。それは毎回発生しません。私はを追加して、スイートを実行して毎回同じ場所で発生するかどうかを確認しようとしましたが、そうではありません。Rspecプロセスが異なる場所でハングするため、プロセスを強制終了できません。どのように診断するのですか?

私はkill -9でプロセスを強制終了しようとしました。その後、プロセス状態が?Eの名前を(ルビ)に変更します。このlinkは、システムコールが終了するのを待ってプロセスがブロックされていることを示しています。このプロセスが終了するたびにマシンを再起動する必要があります。

私はrvm、ruby、mysql、imagemagickを再インストールしようとしました。このプロジェクトでは、imagemagick(mini_magickを介して)の宝石を使っていますが、rspecをブロックするこれらのコマンドの1つである可能性があります。私はputsステートメントをそれぞれのmini_magickコマンドの周りに追加して、それらが実行を終了し、すべて正常に見えるようにしました。

私はこの問題の診断方法に関する提案を探しています。

+0

'-e'スイッチを使用すると、与えられたパターンに基づいて特定の仕様のみを実行できます。詳細は 'rspec -h'を実行してください。 – iain

+0

個々の仕様または小さな仕様のサブセット(単一ファイル)を実行しているときではなく、テストスイート全体を実行しているときに問題が発生しているように見えます。私は、プロセスがブロックされているものをデバッグする方法を探していますか? – MAckerman

+0

少なくともスペックのいくつかを投稿する必要があると思います。少なくとも、何をしようとしているのかを知ることは可能です。また、スペックがランダムな順序で実行されていないことを確認してください。 RSpecを使用してspec_helperファイルを生成した場合は、デフォルトとしてランダムな順序付けが追加されます。 – iain

答えて

0

問題は順序依存のバグである可能性があります。シードを渡すことができ、順序は一貫しています。 RSpecは、ランダマイザをシードするために使用した乱数を出力します。 同じ番号でrspecを実行するには、この番号を使用してください。 --order rand:3455

関連する問題