2017-04-06 49 views
0

,看起來像這樣我的特拉維斯YML文件的腳本部分:特拉維斯腳本退出代碼永遠不會失敗,即使它應該

script: 
- ./run_tests.sh 

腳本本身運行在醬實驗室的一些測試。如果腳本由於測試失敗而失敗,它仍然以代碼0退出,構建繼續傳遞。如果測試失敗,腳本爲什麼不以失敗代碼退出?

當我輸出我的腳本文件的末尾退出代碼,我得到0。當我輸出的腳本命令後,立即.travis.yml文件中的退出代碼,我得到1:

echo $? 
0 
The command "./run_tests.sh" exited with 0. 
$ echo $? 
1 
+0

有你嘗試使用'-e' bash選項的runnig腳本?它應該立即退出,如果腳本中的任何命令返回狀態!= 0.請參閱:https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html – odradek

+0

它仍然返回相同的退出代碼;我想知道是否可能會受到run_tests.sh測試從if語句中運行的事實的影響。 – danielle

+0

是的,的確如此,如果一個進程返回退出代碼1作爲條件在if(if if ; then etc ...')中運行,那麼該語句只會計算爲false,而'-e'選項不會採取行動。我不知道你是如何處理'else'子句,但你可以嘗試在那裏添加'exit 1',看看會發生什麼。 – odradek

回答

1

我意識到這是因爲我使用unittest.TextTestRunner實際運行我的測試中,並從這些測試的退出代碼始終是0,除非你專門捕獲根據他們的測試失敗並退出:

ret = not runner.run(test_suite).wasSuccessful() 
sys.exit(ret) 
+0

什麼是'不'在這裏做?我嘗試過,但沒有報告失敗測試的正確值。 – user5359531