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

发布于 2024-11-29 15:33:34 字数 417 浏览 1 评论 0原文

我想使用 rspec 结合 Faraday 和 Faraday_middleware 来测试 Rails 应用程序的 json 响应。要使用 Faraday,需要应用程序 URL。在测试中我想使用本地主机+端口号。

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

有类似的问题,但没有令人满意的答案此处此处

有什么想法吗?

I would like to test the json responses of a rails application using rspec in combination with faraday and faraday_middleware. To use faraday one needs the application URL. In the tests I would like to use localhost + a port number.

The question is, how can I get or set the port number of the current application instance in a rspec test environment?

There are a similar questions but no satisfying answers here and here.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑饮青盏花 2024-12-06 15:33:34

我有同样的需求(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

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

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

browser.goto "http://localhost:#{HTTP_PORT}/"

I had the same need (Watir+RSpec), but the problem is: there is no Rack stack running by default during tests...

I found this solution:

In 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

Which start the test stack once for all spec tests, and kill it at the end. (In this sample, I am using unicorn, but we can imagine using any other server)

In the spec, I reuse the HTTP_PORT constant to build URL:

browser.goto "http://localhost:#{HTTP_PORT}/"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文