Ich habe eine Post-Methode, die JSON akzeptiert:
%Vor%Als Neuling für rspec bin ich verwirrt, herauszufinden, wie man einen Test gegen diesen POST mit einer akzeptablen JSON-Nutzlast schreibt. Am nächsten komme ich zu dem, was sehr ungenau ist, aber ich möchte den Google-Gott nicht die richtigen Fragen stellen, um mir hier zu helfen.
%Vor%Jede bewährte Anleitung zum Testen von APIs in Sinatra wird ebenfalls sehr geschätzt.
Der von Ihnen verwendete Code ist in Ordnung, obwohl ich ihn etwas anders strukturieren würde, da ich it
blocks nicht so verwenden möchte, wie Sie sie normalerweise sehen. Ich denke, es fördert das Testen von mehr als einem Aspekt von a System auf einmal:
Ich habe let weil es besser ist als eine Instanzvariable in einem before
Block (ein großes Lob an dich, dass du das nicht getan hast). Das post
befindet sich in einem before
Block, da es nicht wirklich Teil der Spezifikation ist, sondern ein Nebeneffekt, der vor dem auftritt, auf den Sie zugreifen. Die subject
ist die Antwort und das macht den it
zu einem einfachen Aufruf.
Da die Überprüfung der Antwort in Ordnung ist, muss ich sie so oft in eine geteiltes Beispiel :
%Vor%und nenne es dann so:
%Vor%und weil sich der Inhaltstyp so oft ändert, stelle ich das in einen Helfer:
%Vor%Es ist einfach, dies dort hinzuzufügen, wo es benötigt wird, indem es über die RSpec-Konfiguration eingefügt wird:
%Vor%dann:
%Vor%Nachdem ich all das gesagt habe, würde ich persönlich nicht mit JSON posten. HTTP POST ist einfach zu handhaben, und jede Form und Javascript Bibliothek macht es einfach und gut. Reagieren Sie mit JSON auf alle Fälle, aber schreiben Sie JSON nicht, HTTP ist viel einfacher.
Edit: Nachdem ich das Helpers
-Bit oben geschrieben habe, wurde mir klar, dass als kleines Juwel besser wäre .
Sieht so aus, als ob die Fähigkeit, post :update, '{"some": "json"}'
auszuführen, zum internen ActionPack test_case.rb hinzugefügt wurde, das von rspec in diesem Commit verwendet wird:
Ссылка
Da Sie Sinatra verwenden, bin ich mir nicht sicher, wie Sie diese Änderungen am besten erhalten - Sie können ActionPack möglicherweise direkt upgraden oder von dem oben genannten Commit patchen.
Wenn Sie sich last_response als JSON ansehen möchten, können Sie rack-test-json ausprobieren, was das trivial macht :
%Vor%