2016-05-26 19 views
2

Ich versuche, die Ring.mock.requests-Bibliothek zu verwenden, um einen http-Dienst zu testen. Ich habe dieses Stück CodeCompojure-api respektiert Körper von ring.mock.requests

(auth-routes  
    (-> 
     (mock/request :post "/auth/user") 
     (mock/body {:username "user" :password "pass"}) 
     (mock/content-type "application/json"))) 

Der Innenteil mit dem faden ersten Makro korrekt zu funktionieren scheint, aber es funktioniert nicht, wenn ich versuche, den Mock-Antrag zu stellen

to-Routen auth Und das ist meine Route:

(def auth-routes 
    (context "/auth" [] 
    :tags ["Authentication"] 
    (POST "/user" [] 
     :return s/Uuid 
     :body [request m/User] 
     :summary "Create new user" 
     (ok (auth/create-user request)))) ...) 

Das ist mein Schema:

(def User {:username s/Str 
      :password s/Str}) 

Die Ausnahme, die ich zu sehen bin ist

clojure.lang.ExceptionInfo 
    Request validation failed 
    {:error (not (map? nil)), :type :compojure.api.exception/request-validation} 

Es sieht aus wie meine Strecke nil wie der Körper wird immer, und ich erwarte {:username "user" :password "pass"} dort zu sein.

Was mache ich falsch und wie gebe ich einen Körper an diese Route weiter?

Antwort

1

Ich denke, Sie sollten Ihre Daten als eine JSON-Zeichenfolge in Ihrem Test serialisieren. cheshire Mit:

(cheshire.core/generate-string {:username "user" :password "pass"}) 

Werfen Sie einen Blick here oder here.

+0

'(body request)' bereits Serialisierung. – munk

+0

Ist Ihre 'auth-routes' Definition korrekt? Sollte Ihr "POST"/Benutzer "[]" nicht so etwas wie "POST"/Benutzer "Anfrage" sein? – kongeor

+0

Es ist korrekt durch die Compojure-API-Beispiele [hier] (https://github.com/metosin/compojure-api) – munk