2017-06-08 11 views
0

私はてこを開き、テスト中にbackticksコマンドが最初に終了するのはなぜですか?

o = `npm outdated` 

を実行した場合、私は私が期待する動作を取得、それはブロックnpmコマンドの戻りまでのすべてと出力を格納します。

テストで同じコード、:

def get_outdated 
o = `npm outdated` 
end 

def test_get_outdated 
assert_equal(true, get_outdated().length > 1) 
end 

失敗私が戻る前にoを印刷する場合、それは空であるので、私はテストがそう、されるまで待機することは不可能である方法より速く走ることに気づきましたコマンドは終了する。

プロセスの終了コードを印刷するとエラーは表示されません。

puts $?.success? #=> true 
+0

Ruby 'backtick'メソッドは同期メソッドです。つまり、戻り値を呼び出すコマンドを待機します。コマンドを 'echo foo'と置き換えて動作させることができます。私は問題があなたの 'npm'から来ていると思います。 'npm set progress = false'を実行するか、より深い検査のために' get_outdated'結果をテストに出力してください。 – ehoffmann

+0

多くのことが間違っている可能性がありますが、それ以上の情報はなくてもデバッグできます。つまり、さまざまな環境変数を調べたいと思うかもしれません。現在の作業ディレクトリと 'PATH'。 –

答えて

0

あなたの環境は、テストとはかなり異なる可能性が高いようです。あなたがすべてにインストールされたパッケージを持っている場合は、あなたがチェックできることの一つは、次のとおりです。ノーパッケージがインストールしたり、すべてのパッケージを出力し、成功のリターンコードなしですぐに、npm outdatedリターンを更新している場合では

puts `npm ls` 

。それはあなたが観察している行動と一貫しています。

また、npm config ls -lを実行して、コマンドを実行している両方の方法が同じであることを確認することもできます。

関連する問題