簡體   English   中英

Rails rspec capybara無法獲取我的內部api以進行連接

[英]rails rspec capybara cannot get my internal api to connect

我正在重構一個基本的Rails應用,以便對外部docker / compute即服務Iron.io進行繁重的工作。 工人'

在重構創建的Grape API時,允許遠程“工作者”的處理狀態在處理完成時通知服務器。 然后,用戶界面使用ajax輪詢本地服務器以進行更新。 API和基本測試都可以。 它也可以使用運行工作程序的Delayed :: job在開發中工作。

但是我似乎無法讓我的水豚測試端到端地工作,因為延遲的:: job運行過程使HTTP請求返回到服務器始終會拒絕連接。

如果我在測試中並行運行Rails服務器,則工作正常:( RAILS_ENV="test" rails s -p 3001 ),然后確保將ENV變量設置為端口3001。

我試過了

  • Capybara.configure的各種組合(如下所示)
  • 在測試中:訪問url(其中url="http://#{Capybara.server_host}:#{Capybara.server_port}" )以查看是否“啟動”了服務器
  • 各種webdrivers(poltergeist,selenium等)

非常感謝任何想法,經驗或指導

注意:在代碼中

  • 通過已填充的ENV ['']變量填充域和端口(這些環境變量將在運行環境iron.io中設置)
  • 端口和app_host設置如下
  • 測試中填充的ENV變量

     Capybara.configure do |config| config.run_server = true config.server_port = "9876" config.app_host = "http://127.0.0.1:9876" end 

    滑軌4.1.0 rspec 3.4.0水豚2.7.0 Poltergeist 1.5.1硒2.53.0

我認為您正在嘗試太多測試。 我建議您“模擬”與其他服務的交互,以使測試自足。 在過去,我添加了一個test.js

  • 在頁面上刪除ajax
  • 檢查是否已發出特定請求( page.evaluate_script
  • 以您的外部服務將其回應的方式( execute_script

像這樣:

# test.js
$.ajax = function(settings) {
    window.__ajaxRequests || (window.__ajaxRequests = []);
    window.__ajaxRequests.push(settings);

    return {
        done: function(cb) { settings.__done = cb; }
    }
}

# spec/features/jobs_spec.rb
visit '/jobs'
click_button 'Start job'

requests = page.evaulate_script('window.__ajaxRequests')
expect(requests.size).to eq(1)
expect(requests[0].url).to eq('http://jobs.yourproduct.com/start')
...

expect(page).not_to have_content('Job completed')
page.execute_script('window.__ajaxRequests[0].__done({data:{status:"complete"}})')

expect(page).to have_content('Job completed')

暫無
暫無

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

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