【发布时间】: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