Mat*_*att 11 ruby ruby-on-rails geokit
出于测试目的,我想更改request.remote_ip的返回值.在我的开发机器上,它总是返回127.0.0.1,但我想给自己不同的假IP来测试我的应用程序的正确行为,而不首先将其部署到实时服务器!
谢谢.
Veg*_*ger 14
如果您希望在整个应用程序中使用此功能,则可能更好/更容易覆盖以下内容中的remote_ip方法app/helpers/application_helper.rb:
class ActionDispatch::Request #rails 2: ActionController::Request
  def remote_ip
    '1.2.3.4'
  end
end
并且1.2.3.4地址随处可用
您可以使用以下方法修改请求对象:
request = ActionController::Request.new('REMOTE_ADDR' => '1.2.3.4')
request.remote_ip 现在返回 1.2.3.4
您可以通过在测试环境中为remote_ip值创建一个mutator来作弊,这通常是未定义的.
例如,使用以下内容更改test/test_helper.rb中的类:
class ActionController::TestRequest
  def remote_ip=(value)
    @env['REMOTE_ADDR'] = value.to_s
  end
end
然后,在测试期间,您可以根据需要重新分配:
def test_something
  @request.remote_ip = '1.2.3.4'
end
这可以在单独的测试中完成,也可以在您的设置例程中,在适当的地方完成.
在编写验证IP禁止,地理定位等的功能测试之前,我不得不使用它.
轨道4.0.1 rc。经过一个小时的搜索,在挖掘代码的同时发现了这个简单的解决方案:)
get '/', {}, { 'REMOTE_ADDR' => '1.2.3.4' }
小智 5
对于集成测试,这适用于rails 5:
get "/path", params: { }, headers: { "REMOTE_ADDR" => "1.2.3.4" }
| 归档时间: | 
 | 
| 查看次数: | 5945 次 | 
| 最近记录: |