在 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 地址?