Wo Teststrecken in ruby on rails
Wo Teststrecken in ruby on rails?
- unit-tests?
- funktionale tests?
- integration tests?
Zusatz:
Um genau zu sein, wo sich zu bewerben Aussagen beschrieben auf Führungen und auf api?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Strecken getan werden sollte, als Teil von Integrations-tests. Integration tests sind, wo Sie testen Sie die wichtigsten Arbeitsabläufe in Ihrer Anwendung - insbesondere, ob eine URL definiert ist oder nicht, scheint eine wichtige workflow.
Ihre integration test Aussehen würde, wie jede normale integration test:
Als zu @jemminger's Reaktion nicht testet Strecken - dabei ist es Rail-tests, die überprüfen, ob Routen.rb arbeitet, ist es nicht die Bahn selbst zu testen, ob
http://yoursite.com/users
definiert ist, in den Routen. Der Nachteil ist, dass die meisten route testen könnte getan werden, in vorhandene Integrations-tests, so dass spezifische tests für Routen könnte redundant sein.Den konkreten Anwendungsfall ich denken kann, sind all die Leute, die bereits, oder gehen, um ein upgrade von Rails 2 auf Rails 3. Den code zum definieren der Routen hat sich stark verändert, und es ist besser, um herauszufinden, aus tests, dass die Routen ordnungsgemäß aktualisiert wurden, als die von Benutzern, wenn Sie berichten, 404-Fehler.
assert_recognizes
könnte die Behauptung, die Sie verwenden möchten.ActionDispatch::IntegrationTest
im Gegensatz zuActionController::IntegrationTest
Warum Sie das Bedürfnis verspüren, testen Sie die Strecken? Rein, um sicherzustellen, dass die Routen definiert Ihre Routen.rb wirklich funktionieren? Wenn dem so ist, dann nicht. Das ist nicht die Aufgabe der Anwendung von tests, um sicherzustellen, dass die framework-Interna funktionieren einwandfrei - das ist die Aufgabe des Rails-Frameworks in eigenen tests.
Wenn du vielleicht eine Art dynamische/Benutzer-definierte route, die Sie testen wollen, würde ich wahrscheinlich gehen mit der integration.
Ich schlage vor, Sie erstellen eine test-Datei für die Routen in test/Controller Ordner.
Es wurde erwähnt, dass Sie gehören integration-test. Ich bin nicht einverstanden. Sie testen lediglich Routen, das ist es. So würde es eher Herbst in funktionale oder auch unit-Tests anstelle von Integrationstests.
Integration-tests sind für die flow, wo Sie testen Sie das zusammenspiel der verschiedenen controller-Aktion, z.B. der Ausführung eines Geschäftsprozesses wie der Benutzer sich anmeldet, durchsucht die Website und legt einen Artikel in den Warenkorb.
Das sagte der Integrationstests wird nicht funktionieren, wenn Sie Ihre Routen nicht funktionieren. So viele sagen, dass die integration-tests ist der Ort, wo Sie Routen zu testen.
Jedoch, wenn man bedenkt, die Entwicklung Zyklus, erstellen Sie unit-tests, controller, tests, route-tests, etc. Erstens, bevor Sie das integration-tests.
Und auf einer anderen Anmerkung:
assert_routing
beide tests:assert_generates
undassert_recognizes
.Laut einem Kommentar in diese Schienen-bug, der richtige Ort ist in einem funktionellen test. Wenn Sie versuchen, um Sie zu testen in einem integration test, die Routen, die Sie gegründet
routes.rb
wird nicht verfügbar sein.Route-tests sind gute Orte, um die Liste links, die existieren in der wildnis, und zu vermeiden, versehentlich brechen Sie mit einem code ändern. Es ist ein wenig seltsam, dass die tests beschränkt auf einen controller, da es die route als ganzes sind Sie eigentlich testen, aber ich habe nicht gehört, der eine 'route set test'.
Wenn Sie mit rspec, dann ist der natürlichste Ort für routing-tests ist in das Verzeichnis
spec/routing
. Von Die Rspec-Dokumentation: