4 Stimmen

Gute Praktiken für Integrationstests für meine Rails-App externe Endpunkte?

Ich werde es kurz halten, ich habe eine Rails-App, die mit anderen Anwendungen kommunizieren, einige mit SOAP (Nicht-Rails-Anwendungen natürlich...) und andere mit REST. Ich mache Integrationstests, um sicherzustellen, dass meine Endpunkt-Wrapper-Klassen korrekte Mappings und Setup haben. Sie werden jedoch standardmäßig ausgeführt von rake test was sie langsam und anfällig macht. Ich möchte die Unit-Tests häufig und die Integrationstests nur "bei Bedarf" durchführen. Wie machen Sie das?

Was sind Ihre Präferenzen bei solchen Integrationstests?

  • Wie tief gehen Sie beim Unit-Test und/oder Mocking?
  • Replizieren Sie ganze SOAP- oder REST-xml-Antworten in Stubs?
  • Erstellen Sie überhaupt Integrationstests für "externe Endpunkte"?

Update Q: Wie schließe ich ein Testverzeichnis während der Ausführung aus? rake test ?

1voto

gtd Punkte 16428

Die Lösung lautet VCR .

0voto

oma Punkte 33650

Ausschluss von Endpunkt-Integrationstests von rake test und die Möglichkeit, sie zu isolieren und mit rake test:endpoints wurde mit nur wenigen Zeilen Code gelöst. Ich muss allerdings zugeben, dass ich eine ganze Menge Stunden damit verbracht habe, zu fluchen und zu schimpfen. Es sollte mehr Dokumentation und Erklärungen in den Rilties-Quellen geben. Ruby-Code wie dieser neigt dazu, nicht sehr selbsterklärend zu sein, IMO.

Nun, es geht los: Erstellen Sie Ihre Aufgabe: lib/tasks/slow_tests.rake

require 'rails/test_unit/railtie'
desc "Runs all endpoint integration tests."
namespace :test do

  #hooks on to the test task through the 'test:prepare'
  #For details, check the railties gem (v3.0+) lib/rails/test_unit/testing.rake,
  #look for "task :test" and "namespace :test"
  TestTaskWithoutDescription.new(:endpoints => 'test:prepare') do |t|
    t.libs << 'test'
    t.pattern = 'test/endpoints/**/*_test.rb'
  end
end

Jetzt kann ich meine fragilen Endpunkt-Integrationstests in das Verzeichnis test/enpoints legen und sie ausführen, wann immer ich will (nicht oft)

Hinweis: Dies setzt voraus, dass Test/Einheit oder Shoulda.

0voto

wintersolutions Punkte 5044

Sie sollten eine dünne Schicht um externe APIs (Facade/Wrapper) schreiben und die vcr-gem für "Stub"-Netzanrufe. Weitere Informationen finden Sie in meinem Artikel über Schienen-Testarchitektur .

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