簡體   English   中英

如何在集成測試中啟動rails服務器?

[英]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_portapp_host可能會干擾某些事情,如下面的評論所述。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM