11

テスト目的で、request.remote_ip の戻り値を変更したいと考えています。私の開発マシンでは、常に 127.0.0.1 が返されますが、最初にライブサーバーにデプロイせずにアプリの正しい動作をテストするために、さまざまな偽の IP を自分に与えたいと考えています!

ありがとうございました。

4

7 に答える 7

15

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

于 2010-01-08T23:36:42.580 に答える
5

以下を使用して要求オブジェクトを変更できます。

request = ActionController::Request.new('REMOTE_ADDR' => '1.2.3.4')

request.remote_ip1.2.3.4 を返すようになりました

于 2010-01-08T18:55:49.790 に答える
5

通常は定義されていないテスト環境で 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 禁止、地理位置情報などを検証する機能テストを作成するときに、これを使用する必要がありました。

于 2010-01-08T22:49:02.113 に答える
3

私が今やったのは、このコードを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 に設定されます。値を変更するたびに、サーバーを再起動する必要があります!

于 2010-01-09T00:11:03.080 に答える
0

この回答はrails3でのみ機能します(Rails 3の同様の質問に回答しようとしたときにこの回答を見つけました)、

したがって、誰かがRails3 envで同じことをしようとしている場合に備えて、ここに投稿します

class ActionDispatch::Request
  def remote_ip
    '1.2.3.4'
  end
end

HTH

于 2012-04-24T05:32:58.990 に答える