12 Stimmen

Wert von request.remote_ip in Ruby on Rails ändern

Zu Testzwecken möchte ich den Rückgabewert von request.remote_ip ändern. Auf meinem Entwicklungsrechner wird immer 127.0.0.1 zurückgegeben, so wie es sein sollte, aber ich möchte mir verschiedene falsche IPs geben, um das korrekte Verhalten meiner App zu testen, ohne sie zuerst auf einen Live-Server zu übertragen!

Ich danke Ihnen.

15voto

Veger Punkte 35866

Wenn Sie diese Funktionalität in Ihrer gesamten Anwendung benötigen, ist es vielleicht besser/einfacher, die Methode remote_ip in Ihrer app/helpers/application_helper.rb :

class ActionDispatch::Request #rails 2: ActionController::Request
  def remote_ip
    '1.2.3.4'
  end
end

Und die Adresse 1.2.3.4 ist überall verfügbar

6voto

Simon Duncombe Punkte 91

Für Integrationstests funktioniert dies mit Rails 5:

get "/path", params: { }, headers: { "REMOTE_ADDR" => "1.2.3.4" }

5voto

Veger Punkte 35866

Sie können das Anfrageobjekt mit ändern:

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

request.remote_ip gibt jetzt 1.2.3.4 zurück

5voto

tadman Punkte 200181

Sie können ein wenig schummeln, indem Sie einen Mutator für den Wert remote_ip in der Testumgebung erstellen, der normalerweise nicht definiert ist.

Ändern Sie zum Beispiel die Klasse in test/test_helper.rb wie folgt:

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

Während der Prüfung können Sie dann nach Bedarf neu zuordnen:

def test_something
  @request.remote_ip = '1.2.3.4'
end

Dies kann entweder im Einzeltest oder im Rahmen Ihrer Einrichtungsroutine geschehen, wo immer dies angebracht ist.

Ich musste dies bereits beim Schreiben von Funktionstests zur Überprüfung von IP-Sperren, Geolokalisierung usw. verwenden.

5voto

woto Punkte 2608

Schienen 4.0.1 rc. Nach Stunde der Suche fand diese einfache Lösung beim Graben zum Code :)

get '/', {}, { 'REMOTE_ADDR' => '1.2.3.4' }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X