2013-02-04 18 views
6

Ich habe gerade eine detaillierte RSPEC Capybara Integration und Unit Tests für Rails App abgeschlossen, die Omniauth (Twitter) Login, Ausfüllen Formulare, Daten Validierungen, etc., aber ich frage mich, ob Es besteht die Notwendigkeit, einen separaten Controller oder Funktionstest zu schreiben.Rails RSPEC Controller Test vs Integrationstest

Möchten Sie Ihre Eingabe und keine Links zu weiteren Lesungen usw.

Antwort

6

Ich persönlich denke, wenn Ihre Anfrage (Integration) spec trainiert alle Codepfade Sie bedeckt zu schätzen wissen. Ryan Bates hat einen tollen Railscast darüber, wie er hier testet: http://railscasts.com/episodes/275-how-i-test?autoplay=true und etwa 5:05 in er sagt ähnliches. Wie du, schreibe ich lieber Integrationstests als Controller-Spezifikationen. Die meiste Zeit arbeiten Controller einfach mit CRUD-Operationen (besonders, wenn Sie darauf achten, Domänenlogik außerhalb des Controllers zu halten), also testen Sie nur das Gerüst.

+0

Ich schätze Ihre Eingabe. – user937531

10

Ich spiele den Advokaten des Teufels hier, da ich weiß, dass ich wahrscheinlich in der Minderheit mit dieser Meinung bin: Ich bevorzuge es tatsächlich, äußerst sorgfältige Controller-Tests zu machen. Ein paar Gründe:

1) Ich finde es einfacher, jeden Pfad und jedes Ergebnis auf Controller-Ebene systematisch zu testen als auf der Ebene des Integrationstests. Meine Integrationstests sind hauptsächlich nur glückliche Pfade und einige der häufiger auftretenden Fehlerpfade.

2) Auf der Controller-Ebene treten viele potenzielle Sicherheitsprobleme auf. Ein gründliches Testen hilft mir sicherzustellen, dass nichts böswilliges durch meine Modelllogik kommt.

3) Dies ist subjektiv, aber es zwingt mich wirklich, über einige der langen Wege nachzudenken, die meine Anwendung durchlaufen könnte. Was passiert, wenn jemand versucht, ein ungültiges Passwort-Reset-Token in die URL einzugeben? Controller-Tests stellen sicher, dass ich alle Optionen in Betracht ziehe.

4) Im Gegensatz zu Integrationstests sind sie ziemlich einfach zu testen. Jede Aktion ist nur eine Rubin-Methode!

Verwandte Themen