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
Ruby 'backtick'メソッドは同期メソッドです。つまり、戻り値を呼び出すコマンドを待機します。コマンドを 'echo foo'と置き換えて動作させることができます。私は問題があなたの 'npm'から来ていると思います。 'npm set progress = false'を実行するか、より深い検査のために' get_outdated'結果をテストに出力してください。 – ehoffmann
多くのことが間違っている可能性がありますが、それ以上の情報はなくてもデバッグできます。つまり、さまざまな環境変数を調べたいと思うかもしれません。現在の作業ディレクトリと 'PATH'。 –