2013-04-18 9 views
6

Ich habe eine App angenommen, die einige Testabdeckung hat, aber die meisten Tests sind von unterschiedlicher Qualität. Der Großteil der App arbeitet gegen eine JSON-API. Ich wollte Request Specs schreiben, aber das Authentifizieren und Senden von POSTs mit den Authentifizierungsdaten war nicht trivial. Zum Testen einer JSON-API wären Controller-Spezifikationen besser geeignet?rspec integration/Anfrage Spezifikationen vs Controller-Spezifikationen mit einem Schwerpunkt auf JSON api

Zum Beispiel

match 'api/login-mobile' => 'api#login_mobile', :as => :login_mobile, :defaults => {:format => 'json' } 

Dies scheint trivial zu sein, um zu bekommen, aber würde eine Integration spec mit Capybara erfordern. Darüber hinaus würde, Capybara nicht Sitzungsdaten nativ senden und

page.driver.post ..... 

erfordern würde ich Integrationstests für die Prüfung UI-Interaktionen erhalten, aber es scheint wie ein wirklich schlechtes Modell für einen JSON-api zu testen. Fehle ich etwas? Oder gibt es ein Tutorial für die Durchführung von Integrations-/Requeset-Tests? Ich schaue Diskurs gerade jetzt und so ziemlich alle ihre Tests sind Controller .... wenn Integration/Anfrage Spezifikationen waren die Bienen Knie, warum sollten sie diese Entscheidung treffen?

thx im Voraus

+0

[Verwenden Sie Capybara nicht zum Testen der API] (https://www.varvet.com/blog/capybara-and-testing-apis/). –

+0

Re: Ihre erste Frage, "zum Testen einer JSON API würde Controller-Spezifikationen besser geeignet sein?" Es hängt davon ab, was Sie testen? Testen Sie Controller-Funktionen (zurückgegebener HTTP-Status, Weiterleitungen, model.count-Änderungen), JSON-Inhalt oder übergreifende Dinge wie Authentifizierung/Autorisierung? – Midwire

Antwort

-1

Ich würde Tests Integration Stil tun, ein wenig wie this SO post.

Das Interagieren mit einem API-Endpunkt über JSON ist höher als nur der Controller. Daher würde ich wahrscheinlich die von RSpec bereitgestellten Blockdeskriptoren feature und scenario verwenden. (Beispiel here).

Funktional ist es nicht viel anders als eine Controller-Spezifikation, aber hilft Ihnen, in Richtung Szenario/Feature-Typ des Testens, nicht auf Unit-Level-Tests.

Verwandte Themen