1

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

4

1 回答 1

1

根据您在控制器中访问它的方式......这对我来说效果很好:

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

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

于 2012-11-02T23:43:52.033 回答