Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Migrating from clojure.test
I'm going to assume your test file looks like this:
(ns my.test.ns (:use clojure.test)) (deftest some-test ...) (deftest some-test ...)
Leave those old tests alone and just add facts to your test files:
(ns my.test.ns (:use clojure.test) (:use midje.sweet)) ;; adding on... (deftest some-test ...) (deftest some-test ...) (fact (+ 1 1) => even?) ;; adding on...
If you use Leiningen, install the leiningen plugin. You can then run
lein midje to see output like this:
+++ The following shows how 'cake midje' checks facts in test files. +++ The failure is intentional. FAIL at (t_core.clj:13) Expected: "I am a test file fact" Actual: 3 +++ The following shows how 'cake midje' checks facts in source files. +++ The failure is intentional. FAIL at (core.clj:7) Expected: "I am a source-file fact." Actual: 3 +++ The following shows how 'cake midje' runs clojure.test deftests. +++ The failure is intentional. >>> Output from clojure.test tests: FAIL in (a-clojure-test-test) (t_core.clj:8) expected: (= 1 "I am a deftest expected result.") actual: (not (= 1 "I am a deftest expected result.")) >>> clojure.test summary: Ran 1 tests containing 1 assertions. 1 failures, 0 errors. >>> Midje summary: FAILURE: 2 facts were not confirmed.
Notice that both kinds of tests are run, and that summary results are reported correctly for both.
I don't recommend rewriting existing tests unless you are already changing them for some other reason.
Adapting setup and teardown logic
If existing clojure.test tests make use of setup/teardown logic (for instance, via use-fixtures), then this logic can also be migrated to midje using
with-state-changes as described in Setup and teardown.
(def person (atom nil)) (defn create-state  (reset! person "bill")) (defn destroy-state  (reset! person nil)) (defn my-test-fixture [f] (create-state) (f) (destroy-state)) (use-fixtures :each my-test-fixture) (deftest person-is-named-bill (is (= "bill" @person))) ;; can be adapted to Midje using `with-state-changes`: (with-state-changes [(before :facts (create-state)) (after :facts (destroy-state))] (fact @person => "bill"))