2014-09-22 54 views
9

我正在嘗試使用RSpec來功能測試我的REST API。將參數傳遞給命令行上的Rspec測試

我喜歡它的工作方式是使用CI構建來構建並將我的應用程序部署到雲中某個測試服務器,然後讓它啓動自動功能測試。但爲了正確地做到這一點,我需要能夠傳遞應用程序部署的基本url/domain。它不會是一樣的。

到目前爲止我發現的一切使它看起來像RSpec不能做到這一點。如果我不能在命令行中傳遞參數,還有另一種方法嗎?或者RSpec不是這個的正確選擇?

+0

你爲什麼需要這個? – 2014-09-23 00:40:07

+0

想到我描述了這個場景。我想要一個能夠構建應用程序的jenkins構建,運行單元測試,然後將構建部署到臨時雲服務器(新的ec2實例或降低成本,測試完成後關閉),然後運行測試。由於這將是一個新的服務器,我不會知道URL來運行測試。 – 2014-09-23 14:31:59

+0

不是問題的答案,但是您是否嘗試過https://travis-ci.org/?不知道他們是否有方法來整合這些參數 – dfherr 2014-09-23 16:19:59

回答

13

一種方法是繞過對rspec的調用,接受命令行參數,然後在代碼中啓動rspec。如果你不想爲此編寫自己的二進制文件,rake也可以。

Look here如何從代碼運行rspec。

另一種方法是在調用測試時設置ENV變量,最好在規範中使其成爲可選項。

$> SPEC_URL=http://anotherhost:666 rspec

代碼

url = ENV['SPEC_URL'] || "http://localhost:4000"

我建議兩個方法,因爲它是在我看來,更清潔,更簡單的方法。

+0

謝謝。我以爲我曾經提到它,但沒有。我以前遇到過環境變量方法。這對我來說似乎是一種破綻,但可能最終成爲唯一的方式。我會用耙子檢查一下,看看它是如何工作的。 – 2014-09-23 14:33:26

+0

工作。畢竟不是太討厭。謝謝! – 2014-09-23 17:13:09

+0

如果您使用TeamCity,然後寫: 'url = ENV ['SPEC_URL'] .to_s.empty? ? ENV ['SPEC_URL']:「http:// localhost:4000」' ENV ['SPEC_URL']不僅可以是零,也可以是空字符串(在TeamCity的情況下)。 – Evmorov 2016-11-03 12:44:21