[英]Rails: how can I test a stopwatch in my Capybara integration tests?
[英]How do I start the rails server as part of my integration tests?
我是Rails /開源開發的新手,我正在使用Test Unit與Capybara / WebDriver一起編寫集成測試
在執行集成測試之前,如何確保Rails服務器正在運行並准備就緒?
我在test_helper.rb中嘗試了以下內容:
server_running = false
path = File.join(Rails.root, "tmp", "pids", "server.pid")
if FileTest.exist? path
begin
pid = File.read(path).to_i
server_running = true if Process.getpgid pid
rescue Errno::ESRCHfound
end
end
if !(server_running)
puts "Starting Rails Server"
system "rails s"
else
puts "Rails Server already started"
end
問題是測試從未運行,因為技術上“系統'軌道s'”永遠不會完成
所以我接下來通過“rails s -d”嘗試了分離模式,但這對我不起作用(在SO上的其他地方提出單獨的問題)並且tmp文件夾中不存在server.pid
所以最后我嘗試了系統“rails s&”。 問題是,我的單元測試在Rails服務器實際准備好之前立即開始執行。 我想我真正需要的是一種啟動Rails服務器的方法,並在它實際准備開始接受請求時弄清楚(通過輪詢或一些回調)
感謝關於此的最佳實踐的任何建議和指導。 我已經被推薦使用Spork繼續進行CI,但是現在,我想堅持使用我的工具(TestUnit,Capybara,WebDriver),除非絕對必要
編輯:在我的test_helper.rb中,我在文件的末尾有以下內容
class ActionDispatch::IntegrationTest
include Capybara::DSL
def setup
Capybara.default_driver = :webkit
Capybara.run_server = true
Capybara.server_port = 3001
Capybara.app_host = "http://localhost:3001"
end
def teardown
Capybara.reset_sessions!
end
end
我的一個測試只是訪問('/ linkedin / importprofile') - 這樣做會產生以下異常:
1) Error:
test_should_display_previously_imported_LinkedIn_data_in_Basic_Profile_fields(LinkedinTest):
Capybara::Webkit::InvalidResponseError: Unable to load URL: http://localhost:3001/linkedin/importprofile because of error loading http://localhost:3001/linkedin/importprofile: Unknown error
/var/lib/gems/1.9.1/gems/capybara-webkit-1.0.0/lib/capybara/webkit/browser.rb:215:in `check'
/var/lib/gems/1.9.1/gems/capybara-webkit-1.0.0/lib/capybara/webkit/browser.rb:152:in `command'
/var/lib/gems/1.9.1/gems/capybara-webkit-1.0.0/lib/capybara/webkit/browser.rb:18:in `visit'
/var/lib/gems/1.9.1/gems/capybara-webkit-1.0.0/lib/capybara/webkit/driver.rb:29:in `visit'
/var/lib/gems/1.9.1/gems/capybara-2.1.0/lib/capybara/session.rb:193:in `visit'
/var/lib/gems/1.9.1/gems/capybara-2.1.0/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
/home/blue18hutthutt/Sites/pd_frontend/test/integration/linkedin_test.rb:31:in `block in <class:LinkedinTest>'
您永遠不需要手動啟動Rails服務器來運行測試。 在需要時,驅動程序將自動啟動一個並在測試運行完成時將其關閉。 默認的Rack :: Test驅動程序甚至不需要服務器進程,因為它直接與Rack連接。
如果您在刪除手動服務器啟動代碼后仍然遇到問題,我首先要確保您已將Capybara設置為使用自述文件本節中所述的 Test :: Unit。 ( 編輯:雖然看起來有,但是手動指定server_port
和app_host
可能會干擾某些事情,如下面的評論所述。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.