Change value of request.remote_ip in Ruby on Rails

2019-02-08 19:56发布

For test purposes I want to change the return value of request.remote_ip. While being on my development machine it returns always 127.0.0.1 as it should but I would like to give myself different fake IPs to test the correct behavior of my app without deploying it to an live server first!

Thank you.

7条回答
我只想做你的唯一
2楼-- · 2019-02-08 20:55

You can cheat a bit by making a mutator for the remote_ip value in the test environment which is normally not defined.

For instance, alter the class inside of test/test_helper.rb with the following:

class ActionController::TestRequest
  def remote_ip=(value)
    @env['REMOTE_ADDR'] = value.to_s
  end
end

Then, during your testing you can reassign as required:

def test_something
  @request.remote_ip = '1.2.3.4'
end

This can be done either in the individual test, or within your setup routine, wherever is appropriate.

I have had to use this before when writing functional tests that verify IP banning, geolocation, etc.

查看更多
登录 后发表回答