【问题标题】:Setting host/remote_addr and other env properties in Rails 3 controller tests在 Rails 3 控制器测试中设置 host/remote_addr 和其他环境属性
【发布时间】:2012-11-03 07:43:52
【问题描述】:

在 Rails 2 中,您可以像这样在控制器测试中指定主机和其他 Rack 环境属性:

should "spoof host and remote_addr" do
  get "/thing/2", {}, :remote_addr => "192.71.1.2", :host => "somewhere.else"
end

但是,由于某种原因,这在 Rails 3 上不起作用。我尝试使用常规控制器,但 env["HTTP_HOST"] 没有按预期设置(与 "REMOTE_ADDR" 相同)。我也试过这个:

should "use host and remote_addr" do
  request.env["REMOTE_ADDR"] = "192.71.1.2"
  request.env["HTTP_HOST"] = "git.gittit.it"
  get "/thing/1"
end

这也曾在 Rails 2 中工作,但不再在 Rails 3 中工作。作为最终测试,我尝试了一个解析为裸 Rack 应用程序的路由,结果相同。

如何在 Rails 3 控制器测试中欺骗主机和 IP 地址?

【问题讨论】:

  • 我的用例是一个 Rack 应用程序。我最终放弃了,而是在我的测试中这样做:MyRackEndPoint.call({ "PATH_INFO" => "/hey", "HTTP_HOST" => "myhost.com" }) 效果很好。

标签: ruby-on-rails-3 testing controller


【解决方案1】:

取决于您如何在控制器中访问它...这对我来说效果很好:

request.stub!(:remote_ip).and_return('192.71.1.2')

当我在控制器中使用 request.remote_ip 时,我得到 192.71.1.2

【讨论】:

  • 谢谢,但我希望有一些不那么脆弱的东西。我只想将数据从 A 传输到 B,不需要存根。此外,这不适用于 Metals/Rack 应用程序。
猜你喜欢
  • 2012-04-23
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2017-09-27
  • 2015-08-09
  • 1970-01-01
相关资源
最近更新 更多