テスト目的で、request.remote_ip の戻り値を変更したいと考えています。私の開発マシンでは、常に 127.0.0.1 が返されますが、最初にライブサーバーにデプロイせずにアプリの正しい動作をテストするために、さまざまな偽の IP を自分に与えたいと考えています!
ありがとうございました。
テスト目的で、request.remote_ip の戻り値を変更したいと考えています。私の開発マシンでは、常に 127.0.0.1 が返されますが、最初にライブサーバーにデプロイせずにアプリの正しい動作をテストするために、さまざまな偽の IP を自分に与えたいと考えています!
ありがとうございました。
If you want this functionality in your whole application, it might be better/easier to override the remote_ip method in your app/helpers/application_helper.rb
:
class ActionDispatch::Request #rails 2: ActionController::Request
def remote_ip
'1.2.3.4'
end
end
And the 1.2.3.4 address is available everywhere
以下を使用して要求オブジェクトを変更できます。
request = ActionController::Request.new('REMOTE_ADDR' => '1.2.3.4')
request.remote_ip
1.2.3.4 を返すようになりました
通常は定義されていないテスト環境で remote_ip 値のミューテーターを作成することで、少しごまかすことができます。
たとえば、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 禁止、地理位置情報などを検証する機能テストを作成するときに、これを使用する必要がありました。
私が今やったのは、このコードをconfig/environments/development.rb
ファイルの最後に配置して、開発中にのみ実行されるようにすることでした
# fake IP for manuel testing
class ActionController::Request
def remote_ip
"1.2.3.4"
end
end
したがって、これにより、サーバーの起動時に remote_ip が 1.2.3.4 に設定されます。値を変更するたびに、サーバーを再起動する必要があります!
この回答はrails3でのみ機能します(Rails 3の同様の質問に回答しようとしたときにこの回答を見つけました)、
したがって、誰かがRails3 envで同じことをしようとしている場合に備えて、ここに投稿します
class ActionDispatch::Request
def remote_ip
'1.2.3.4'
end
end
HTH