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
Run Code Online (Sandbox Code Playgroud)
并且1.2.3.4地址随处可用
您可以使用以下方法修改请求对象:
request = ActionController::Request.new('REMOTE_ADDR' => '1.2.3.4')
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
然后,在测试期间,您可以根据需要重新分配:
def test_something
@request.remote_ip = '1.2.3.4'
end
Run Code Online (Sandbox Code Playgroud)
这可以在单独的测试中完成,也可以在您的设置例程中,在适当的地方完成.
在编写验证IP禁止,地理定位等的功能测试之前,我不得不使用它.
轨道4.0.1 rc。经过一个小时的搜索,在挖掘代码的同时发现了这个简单的解决方案:)
get '/', {}, { 'REMOTE_ADDR' => '1.2.3.4' }
Run Code Online (Sandbox Code Playgroud)
小智 5
对于集成测试,这适用于rails 5:
get "/path", params: { }, headers: { "REMOTE_ADDR" => "1.2.3.4" }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5945 次 |
最近记录: |