rails rspec capybara无法连接我的内部api



构建一个基本的rails应用程序我正在重新考虑将外部码头工人/计算机作为一项服务进行繁重的吊装,即iron.io。"工人">

在重构中创建了Grape API,以允许远程"工作者"的处理状态在处理完成时通知服务器。然后,用户界面使用ajax轮询本地服务器以进行更新。API和基本测试都可以。它也可以在开发中使用Delayed::job来运行工作者。

然而,我似乎无法让我的水豚测试端到端地工作,因为延迟的::作业运行过程向服务器发出HTTP请求总是被拒绝连接。

如果我将rails服务器与测试并行运行:(RAILS_ENV="test" rails s -p 3001(,然后确保ENV变量设置为端口3001,那么它可以正常工作。

我试过

  • Capybara.config的各种组合(如下所示(
  • 在测试中:访问url(其中url="http://#{Capybara.server_host}:#{Capybara.server_port}"(,看看这是否会"启动"服务器
  • 各种网络驱动程序(恶作剧、硒等(

任何想法、经验或指导都非常感谢

Ben

注意:在代码中

  • 填充域&端口通过已填充的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.0rspec 3.4.0水豚2.7.0恶作剧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')

相关内容

  • 没有找到相关文章

最新更新