在rspec测试中使用Rails应用程序的端口号

Mak*_*ksh 5 rspec ruby-on-rails

我想使用rspec结合faraday和faraday_middleware来测试rails应用程序的json响应.要使用法拉第,需要应用程序URL.在测试中我想使用localhost +一个端口号.

问题是,如何在rspec测试环境中获取或设置当前应用程序实例的端口号?

这里这里有类似的问题,但没有令人满意的答案.

有任何想法吗?

Mik*_*ski 2

我有同样的需求(Watir+RSpec),但问题是:测试期间默认没有运行机架堆栈......

我找到了这个解决方案:

spec_helper.rb

HTTP_PORT = 4000

test_instance_pid = fork do
  exec 'unicorn_rails -E test -p %d' % HTTP_PORT
end

at_exit do
  Process.kill "INT", test_instance_pid
  Process.wait
end
Run Code Online (Sandbox Code Playgroud)

它为所有规范测试启动一次测试堆栈,并在最后终止它。(在此示例中,我使用的是 unicorn,但我们可以想象使用任何其他服务器)

在规范中,我重用HTTP_PORT常量来构建 URL:

browser.goto "http://localhost:#{HTTP_PORT}/"
Run Code Online (Sandbox Code Playgroud)