2011-01-05 4 views
1

Ich möchte RSpec ausführen, um meinen Code zu testen, wenn ich mit dem Internet verbunden bin und wenn ich nicht bin.Wie sollte ich mit Online-Abhängigkeiten umgehen, wenn Rspec offline ausgeführt wird?

Leider gibt es einige Tests in der Anwendung, die auf mit einer Live-Verbindung angewiesen ist - E-Mail senden, Facebook-Integration usw.

Gibt es einen Best-Practice-Weg, um eine Online-/Offline-Testumgebung oder ist dies zu schaffen schlechte Praxis? Wenn ich daran denke, wie wenig ich darüber im Internet finde, rate ich Letzteres.

Antwort

1

Normalerweise würden Sie in solchen Situationen die Teile des Codes verspotten, die außerhalb Ihrer Anwendung angeschlossen sind. Auf diese Weise können Sie mit den erwarteten Ergebnissen des Service/Systems, mit dem Sie verbunden sind, testen. Es ist auch schneller, Tests durchzuführen.

Es gibt eine kurze Anleitung zum Spotten mit rspec here, aber ich bin sicher, dass Sie selbst viel finden können.

Zum Testen, dass E-Mails gesendet werden, gibt es andere Ansätze, wenn Sie über ActionMailer senden. Es gibt einen Abschnitt darüber in der rails testing guide.

BEARBEITEN (als Antwort auf Kommentar): Sie können eine Methode in TestHelper setzen, um nur Tests auszuführen, wenn Sie online sind. Etwas wie:

def when_online 
    if test_remote_connectivity 
    yield 
    else 
    puts "Skipping test offline." 
    end 
end 

Dann können Sie es nennen mag:

def test_facebook 
    when_online do 
    ..... 
    end 
end 

nicht sicher, ob ich es ganz befürworten, aber es könnte das tun, was Sie wollen!

+0

Danke Shadwell, sehr hilfreich. Ich bin schon Anstoßen und spöttisch, aber ich frage mich, ob es irgendeine Art und Weise war ich etwas entlang der Linien von tun könnte: wenn testRemoteConnectivity @Online = true sonst @Online = false Ende anhängige @Online tun # Remote-Abhängigkeitstests Ende Ich vermute, ich bin zu viel Sorgen über nichts, aber es wäre schön, Rot zu vermeiden, während getrennt –

+0

Sie könnten eine Methode schreiben, um das zu tun und nur Tests, die davon abhängen, online zu sein, wenn Sie online waren (wenn Sie wirklich wollen!). Es scheint mir mehr Mühe zu geben, als auf lange Sicht (auf mich) zu spotten. Ich werde meine Antwort bearbeiten. – Shadwell

+0

Nett - das war genau die Art von Logik, die ich suchte. Ich stimme Ihrer Einschätzung zu, dass es wahrscheinlich nicht das Richtige ist, aber es ist schön zu sehen, wie der Code geschrieben würde, wenn es erforderlich wäre –

0

Sie könnten webmock innerhalb der Tests/Spezifikationen verwenden, die Sie nicht mit der Remote-Ressource verbinden möchten.

Verwandte Themen