我想使用法拉第和RSpec測試我們的Rails應用程序的HTTP API。法拉第需要主機的網址+端口。不幸的是,測試環境的端口一直在變化。如何在規範中以編程方式訪問當前端口?Rails端口的測試環境
4
A
回答
7
如果使用水豚您可以設置端口的spec_helper.rb像這樣:
Capybara.server_port = 1234
3
有可能做到這一點的方法不止一種,但這是工作我現在:
命令
port = `lsof -p #{Process.pid} -ai TCP -as TCP:LISTEN -Fn | grep ^n | cut -c 4- | uniq`.strip
注意您必須在之後該應用已加載 - 即,您不能在您的environment.rb
或application.rb
文件中使用此功能。
解釋
基本上,這個命令的作用如下:
lsof
是打開文件列表-p #{Process.pid}
它限制到當前進程的Unix命令(即你的測試網站服務器實例)-ai TCP
將其限制爲TCP類型的「文件」(即,打開的TCP端口)。 (注:-a
是讓和與PID一個搜索 - 在默認情況下,僅使用-i
會或搜索)正在進行在聽取-as TCP:LISTEN
限制只是TCP端口(如反對任何開放口岸 - 喜歡你的應用程序的連接的Postgres例如)-Fn
它告訴只輸出「名稱」一欄,在這種情況下將是正在上
那個的輸出通過本身部分將是這樣的:
p12345
n*:5001
n*:5001
第一行,與p
開始是進程ID。沒有辦法抑制這一點。 接下來的2行(不知道爲什麼它可以輸出倍數,但我們會在一分鐘內處理它)是「名稱」列(因此爲n
),後面是IP +端口。在我們的案例中(我也想象你們在測試環境中),網絡服務器收聽全部可用的本地IP,因此*
。然後,它告訴我們,端口,在這種情況下,5001
最後,我們把它管道... * grep ^n
消除第一行(進程ID) * cut
說「從4列切在「 - 即,取出n*:
回到只是的端口, * uniq
只得到了一個實例
(這也將有一個結尾的新行,因此strip
電話。)
用法
在我的情況下,我在我的Cucumber env.rb
中使用它,重新配置ActiveMailer的URL選項,以便我的電子郵件鏈接可以在測試中正常生成爲工作鏈接:
po RT = lsof -p #{Process.pid} -ai TCP -as TCP:LISTEN -Fn | grep ^n | cut -c 4- | uniq
.strip
MyApp的:: Application.configure做 config.action_mailer.default_url_options [:主機] = 「0.0.0.0:#{port}」 結束
毫無疑問,你可以做同樣的在Rspec的助手/配置中也是如此。
相關問題
- 1. 對Rails的測試環境
- 2. 在測試環境中調試Ruby/Rails
- 3. 在測試環境中啓動rails
- 4. Ruby On Rails測試環境加速?
- 5. JavaScript未載入Rails測試環境
- 6. 瞭解RSpec和Rails測試環境
- 7. Rails測試環境命名路線
- 8. 指示測試環境的彈簧測試環境屬性
- 9. Django測試環境
- 10. LDAP測試環境
- 11. navision測試環境
- 12. QuickBooks測試環境
- 13. VoIP測試環境
- 14. Microsoft Graph的測試環境
- 15. 一致的測試環境
- 16. 環境URL的測試
- 17. Rails:測試需要訪問Rails環境的助手(例如request.fullpath)
- 18. Rails 4:根據環境使用不同的服務器端口
- 19. Windows Ce 6.0測試環境?
- 20. 測試虛擬環境(virtualenv)
- 21. 構建測試Citrix環境
- 22. 沙盒/測試環境?
- 23. ADFS&Shibboleth Sp測試環境
- 24. PHP/SQL測試環境
- 25. 設置Web測試環境
- 26. 靜音jQuery的遷移在Ruby on Rails的測試環境
- 27. Rails單元測試可以運行在與測試不同的環境中嗎?
- 28. Rails - 如何配置瘦端口和環境?
- 29. Rails測試環境中的DB日誌記錄
- 30. Rails測試環境:爲什麼它需要ActionMailer的default_url_options?
感謝您的回覆。不幸的是,它不適合我們這種方式。在特定的測試中我們不使用水豚。例如,我們只需調用'Faraday.new(:url =>「http:// localhost:3033」)'。我們是否需要調用'visit'或類似的東西? – Zardoz
我不明白你爲什麼不使用RSpec + Capybara來測試你的API? 請參閱http://jeffkreeftmeijer.com/2011/acceptance-testing-using-capybaras-new-rspec-dsl/。 – fpauser
你在哪個環境下使用Faraday? (controller-spec?model-spec?integration-spec?) – fpauser