Einige Funktionen in meiner App funktioniert unterschiedlich, je nachdem das IP-Adresse des Clients. Gibt es eine Möglichkeit, dies in Rails Funktionstests zu testen? Ich verwende Test :: Unit und Shoulda.Gibt es in Rails-Controller-Tests eine Möglichkeit, eine bestimmte Remote-IP zu simulieren?
Antwort
Sie können dies einfach und ohne Anstoßen, durch die REMOTE_ADDR Umgebungsvariable vor dem Controller Aufruf zu ändern. Hier ist ein fiktiver-Controller, der den Benutzer auf das Home-Pfad umleitet, wenn ihre IP-Adresse 1.2.3.4:
def index
if request.remote_ip == '1.2.3.4'
redirect_to root_path
return
end
@articles = Article.all
end
Hier ist, wie Sie testen können, dass es funktioniert:
def test_should_reject_ip_1_2_3_4
@request.env['REMOTE_ADDR'] = '1.2.3.4'
get :index
assert_redirected_to root_path
end
Sie die Einstellung der Fernbedienung ip im Vorfeld des Controller-Aufrufs, damit Sie diese Daten ohne spezielle Plugins oder Edelsteine fälschen können. Und hier ist die shoulda Version, für ItemsController:
context "with ip 1.2.3.4" do
setup do
@request.env['REMOTE_ADDR'] = '1.2.3.4'
get :index
end
should_not_assign_to :items
should_redirect_to("home"){home_path}
should_not_set_the_flash
end
Der empfangende Controller benötigt eine Methode zum Erkennen der IP-Adresse (oder zum Empfangen als Parameter), und Sie müssen eine bestimmte IP-Adresse für Ihren Test eingeben oder einfach die Test-IP-Adresse als Parameter angeben die Methode.
Wenn das nicht einfach ist, was auch immer Ihre App tut, können Sie die "benutzerdefinierte Funktionalität" auf einen anderen Computer in Ihrem Heimnetzwerk anwenden und die App auf diese Weise testen. Das löst nicht wirklich die Antwort "Löse es durch einen Einheitentest".
Darf ich fragen, warum Ihre Anwendung eine bestimmte Aktion in Abhängigkeit von der IP-Adresse durchführen würde? Vielleicht gibt es einen anderen Weg.
Sie sollten dies erreichen, indem Sie die Anfragen stubblen und ein Mock-Objekt zurückgeben, das request.remote_ip
gleich der gewünschten IP-Adresse hat.
ich FakeWeb um Hilfe zu diesem Thema aussehen würde. Damit können Sie die erwarteten Anfragen/Antworten einfach einrichten. Es könnte auch lehrreich sein, sich anzusehen, wie Schienen selbst does these kinds of tests.
Mit Juwel „Mokka“ Sie tun können:
test "should something" do
request.expects(:remote_ip).returns("189.81.139.183")
...
end
- 1. Gibt es eine Möglichkeit, bestimmte UIImageView-Eigenschaften zu erhalten?
- 2. Gibt es eine Möglichkeit, einen Klick auf eine Warnung in JavaScript zu simulieren?
- 3. Gibt es eine Möglichkeit, eine einzelne FindBugs-Warnung zu ignorieren?
- 4. Gibt es eine Möglichkeit, eine synchrone XHR-Anfrage zu fälschen?
- 5. Gibt es eine bessere Möglichkeit, eine DateTime auf eine bestimmte Genauigkeit zu trimmen?
- 6. Gibt es eine Möglichkeit, eine Methode zu erzwingen, bestimmte Methodensignatur zu folgen?
- 7. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 8. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 9. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 10. Gibt es eine Möglichkeit, "träge" zu lesen?
- 11. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 12. Gibt es eine Möglichkeit, Selektoren zu gruppieren?
- 13. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 14. Gibt es eine Möglichkeit, Unterabfragen zu vermeiden?
- 15. Gibt es eine Möglichkeit, EditActionsForRowAtIndexPath nur für eine bestimmte UITableViewCell in Swift zu implementieren?
- 16. Gibt es eine Möglichkeit zu sagen, in welcher DLL sich eine bestimmte .net-Assembly befindet?
- 17. In groovy, gibt es eine Möglichkeit zu überprüfen, ob ein Objekt eine bestimmte Methode hat?
- 18. Gibt es eine generische Möglichkeit, über eine bestimmte Variable in einer Gruppe von Objekten zu iterieren?
- 19. Gibt es eine Möglichkeit, eine bestimmte Spalte in einem DataGrid zu verbergen, wenn AutoGenerateColumns = True?
- 20. Gibt es eine Möglichkeit, eine bestimmte Notation in Coq zu deaktivieren?
- 21. Gibt es eine Möglichkeit, eine Testdatenbank in Katalysator zu verwenden?
- 22. Gibt es eine Möglichkeit, eine Funktion in jQuery zu deaktivieren?
- 23. Gibt es eine Möglichkeit, eine Datei in Subversion zu "kleben"?
- 24. Gibt es eine Möglichkeit, eine Variable in LaTeX zu definieren?
- 25. Gibt es eine Möglichkeit, eine Klasseneigenschaft in Python zu erstellen?
- 26. Gibt es eine Möglichkeit, Typdeklarationen zu erweitern?
- 27. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 28. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 29. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 30. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
Warum Erkennung IP: die App verschiedene UI-Elemente zeigt je nachdem, ob Benutzer in innerhalb oder außerhalb unserer lokales Netzwerk. – Ethan