2017-06-08 27 views
0

如果我打開撬和運行爲什麼反向測試時首先退出命令?

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

似乎很可能你的環境在測試中比在pry中不同。有一兩件事你可以檢查是,如果您有任何安裝包都:

puts `npm ls` 

由於沒有安裝的軟件包,或者如果你所有的包都立即更新,npm outdated無輸出返回併成功返回代碼。這與你觀察到的行爲是一致的。

您也可以嘗試運行npm config ls -l來驗證您的配置與運行命令的兩種方式相同。

相關問題