Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 146
Testing api endpoints
Dima edited this page Sep 14, 2017
·
5 revisions
To start a project with tests using Leiningen template compojure-api use the option +my-framework-test.
Actually the template compojure-api supports clojure-test and midje:
Example:
lein new compojure-api my-api +clojure-test
lein new compojure-api my-api +midje
After creating the project we get the follow test:
core_test.clj
(nsmy-api.core-test
(:require [cheshire.core :as cheshire]
[clojure.test :refer:all]
[my-api.handler :refer:all]
[ring.mock.request :as mock]))
(defnparse-body [body]
(cheshire/parse-string (slurp body) true))
(deftesta-test
(testing"Test GET request to /hello?name={a-name} returns expected response"
(let [response (app (-> (mock/request:get"/api/plus?x=1&y=2")))
body (parse-body (:body response))]
(is (= (:status response) 200))
(is (= (:result body) 3)))))by default, compojure-api use ring-mock to mock requests.
(testing"Test GET request to /hello?name={a-name} returns expected response"
(let [response (app (-> (mock/request:get"/api/plus?x=1&y=2")))
body (parse-body (:body response))]
(is (= (:status response) 200))
(is (= (:result body) 3))))(testing"Test POST request to /echo returns expected response"
(let [pizza {:name"Turtle Pizza":description"Pepperoni pizza":size:L:origin {
:country:FI:city"MyCity"}}
response (app (-> (mock/request:post"/api/echo")
(mock/content-type"application/json")
(mock/body (cheshire/generate-string pizza))))
body (parse-body (:body response))]
(is (= (:status response) 200))
(is (= body pizza)))))