Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

121 lines (108 sloc) 5.68 KB



  • functions created with unfinished that are called, give useful error message includingHhow they were called.
  • formula macro enables simple generative style testing. Still very alpha.
  • throws now accepts any extending Throwable. For example, this now passes: (throw (NullPointerException.)) => (throws Exception)
  • each item in the right hand side of =streams=> will exhibit deferred evaluation: (provided (volatile-fn) =streams=> [(throw (Exception.) (throw (Exception.)) :evaluates-succesfully]
  • new function midje.util/testables-privates will allow you to write facts against private vars
  • new function midje.util/expose-testables will allow you to write facts against private functions defined with the metadata of ^{:testable true}
  • Can now have prerequisites that throw Throwables using =throws=> (provided (foo) =throws=> (Exception. "message"))
  • Chatty checkers can destructure their single argument.
  • tabular no longer requires variables names to begin with '?'
  • throws checker has been updated: args are now any combination, in any order of messages (or regexes), predicates, or 0 or 1 Throwable classes
  • many more common syntax mistakes give helpful error messages
  • prevented an infinite loop caused by ill-formed tabular facts
  • fact doc-strings now show in report output i. nested facts show nested doc-strings ii. tabular's doc-string shows in a similar manner
  • =stream=> prerequisites give helpful error messages when they run out of items to return
  • removed reflection warnings


  • Fix mysterious type conversion error in some cases when midje has to try really hard to guess the line number.




  • Background prerequisites are now scoped to facts. That works better with let-bindings. (Issue 26)


  • Can defer individual checks in a fact with the =future=> arrow.
  • Negating arrows in facts (=not=>)
  • Folded prerequisites are much more competent
  • Some improvement in error reporting.
  • The #'roughly checker can be used for inexact numerical comparisons.
  • #'irrelevant is a synonym for #anything
  • Line numbers are better reported for failures of very stripped-down forms (like (fact 1 => odd?)
  • A prerequisite like (f 1) =streams=> [1 2 3] produces the next value each time it's called.
  • Issue warning when bare function is used in a prerequisite. Behavior will change in 1.2.
  • Several ways to make checkers that can be used in prerequisites.


  • Ben Mabey fix: eagerly preserve record types
  • Extended-= and collection checkers have semantics for mixing maps and records.


  • Allow, where unambiguous, collection checkers to have multiple element arguments:

    (f) => (just 1 2 3 ) ; same as.. (f) => (just [1 2 3])

  • Unexpected exceptions are displayed with a trimmed stack trace FAIL at (t_collection.clj:427) Expected: 33 Actual: java.lang.Error: Oops! midje.checkers.t_collection$go.invoke(t_collection.clj:425) midje.checkers.t_collection$eval4728$fn__4729.invoke(t_collection.clj:427) midje.unprocessed$expect_STAR_$fn__2586$fn__2587.invoke(unprocessed.clj:69) midje.unprocessed$expect_STAR_$fn__2586.invoke(unprocessed.clj:67) midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:33) midje.unprocessed$expect_STAR_.invoke(unprocessed.clj:66) midje.checkers.t_collection$eval4728.invoke(t_collection.clj:426) user$eval19.invoke(NO_SOURCE_FILE:1)

  • lein midje runs clojure.test deftests and integrates the results into the summary.

  • cake midje does the same for Cake users.

Jump to Line
Something went wrong with that request. Please try again.