Skip to content
Helper for faking clj-http requests.
Branch: master
Clone or download

Latest commit


Type Name Latest commit message Commit time
Failed to load latest commit information.
src/clj_http resolve reflection warnings May 28, 2020
test/clj_http/test Added laziness to potential-alternatives-to Oct 5, 2017
.travis.yml Fix Travis configuration Oct 8, 2017 release 1.0.3 Feb 28, 2017
LICENSE release 1.0.3 Feb 28, 2017 remove test-oldest from readme as well Feb 28, 2017

clj-http-fake Build Status MIT License Clojars Project

Basically, fakeweb in Clojure, for clj-http.


(ns myapp.test.core
  (:require [clj-http.client :as c])
  (:use clj-http.fake))

The public interface consists of macros:

  • with-fake-routes - lets you override clj-http requests that match keys in the provided map
  • with-fake-routes-in-isolation - does the same but throws if a request does not match any key
  • with-global-fake-routes
  • with-global-fake-routes-in-isolation

'Global' counterparts use with-redefs instead of binding internally so they can be used in a multi-threaded environment.


(with-fake-routes {
  ;; Exact string match:
  "" (fn [request] {:status 200 :headers {} :body "Hey, do I look like"})
  ;; matches (c/get "")

  ;; Exact string match with query params:
  "" (fn [request] {:status 200 :headers {} :body "Nah, that can't be Google!"})
  ;; matches (c/get "" {:query-params {:query "param"}})

  ;; Regexp match:
  #"https://([a-z]+)" (fn [req] {:status 200 :headers {} :body "Hello world"})
  ;; matches (c/get ""), (c/get "") and so on, based on regexp.

  ;; Match based an HTTP method:
  "" {:get (fn [req] {:status 200 :headers {} :body "What is Scmoogle anyways?"})}
  ;; will match only (c/get "")

  ;; Match multiple HTTP methods:
  "" {:get    (fn [req] {:status 200 :headers {} :body "Nah, that can't be Google!"})
                        :delete (fn [req] {:status 401 :headers {} :body "Do you think you can delete me?!"})}

  ;; Match using query params as a map
   {:address ""
    :query-params {:q "aardark"}} (fn [req] {:status 200 :headers {} :body "Searches have results"})

   ;; If not given, the fake response status will be 200 and the body will be "".
   "" (constantly {})}

 ;; Your tests with requests here


Use Leiningen with profiles. E.g.:

$ lein with-profile +latest-3.x,+1.8 repl

There are aliases to run the tests with the oldest and newest supported versions of clj-http:

$ lein test-3.x  # Testing under clj-http 3.x
$ lein test-2.x  # Testing under clj-http 2.x


Released under the MIT License.


Please feel free to submit pull requests!

By participating in this project you agree to follow the Contributor Code of Conduct.

The list of contributors is available on GitHub.

You can’t perform that action at this time.