Adapts Expectations v2 (https://github.com/clojure-expectations/clojure-test) to Lazytest.
Adapts Expectations v2 (https://github.com/clojure-expectations/clojure-test) to Lazytest.
(approximately v)(approximately v d)Given a value and an optional delta (default 0.001), return a predicate that expects its argument to be within that delta of the given value.
Given a value and an optional delta (default 0.001), return a predicate that expects its argument to be within that delta of the given value.
(between a b)Given a pair of (numeric) values, return a predicate that expects its argument to be be those values or between them -- inclusively.
Given a pair of (numeric) values, return a predicate that expects its argument to be be those values or between them -- inclusively.
(between' a b)Given a pair of (numeric) values, return a predicate that expects its argument to be (strictly) between those values -- exclusively.
Given a pair of (numeric) values, return a predicate that expects its argument to be (strictly) between those values -- exclusively.
(defexpect n & body)Given a name (a symbol that may include metadata) and a test body,
produce a standard lazytest.core test var (using defdescribe).
Given a name (a symbol that may include metadata) and a test body, produce a standard `lazytest.core` test var (using `defdescribe`).
(expect a)(expect e a)(expect e a msg)(expect e a msg ex? e')Translate Expectations DSL to lazytest.core language.
These are approximate translations for the most basic forms:
(expect actual) => (expect actual)
(expect expected actual) => (expect (= expected actual))
(expect predicate actual) => (expect (predicate actual))
(expect regex actual) => (expect (re-find regex actual))
(expect ClassName actual) => (expect (instance? ClassName actual))
(expect ExceptionType actual) => (expect (thrown? ExceptionType actual))
(expect spec actual) => (expect (s/valid? spec actual))
An optional third argument can be provided: a message to be included in the output if the test fails.
In addition, actual can be (from-each [x coll] (computation-of x))
or (in set-of-results) or (in larger-hash-map).
Also, expect can be one of (more predicate1 .. predicateN),
(more-> exp1 expr1 .. expN exprN) where actual is threaded through
each expression exprX and checked with the expected value expX,
or (more-of binding exp1 val1 .. expN valN) where actual is
destructured using the binding and then each expected value expX
is used to check each valX -- expressions based on symbols in the
binding.
Translate Expectations DSL to `lazytest.core` language. These are approximate translations for the most basic forms: `(expect actual)` => `(expect actual)` `(expect expected actual)` => `(expect (= expected actual))` `(expect predicate actual)` => `(expect (predicate actual))` `(expect regex actual)` => `(expect (re-find regex actual))` `(expect ClassName actual)` => `(expect (instance? ClassName actual))` `(expect ExceptionType actual)` => `(expect (thrown? ExceptionType actual))` `(expect spec actual)` => `(expect (s/valid? spec actual))` An optional third argument can be provided: a message to be included in the output if the test fails. In addition, `actual` can be `(from-each [x coll] (computation-of x))` or `(in set-of-results)` or `(in larger-hash-map)`. Also, `expect` can be one of `(more predicate1 .. predicateN)`, `(more-> exp1 expr1 .. expN exprN)` where `actual` is threaded through each expression `exprX` and checked with the expected value `expX`, or `(more-of binding exp1 val1 .. expN valN)` where `actual` is destructured using the `binding` and then each expected value `expX` is used to check each `valX` -- expressions based on symbols in the `binding`.
(expecting string & body)The Expectations version of lazytest.core/describe.
The Expectations version of `lazytest.core/describe`.
(from-each bindings & body)(expect expected (from-each [v coll] (f v))) -- expect this to be true
for each element of collection. (f v) is the actual result.
Equivalent to: (doseq [v coll] (expect expected (f v)))
(expect even? (from-each [v (range 10)] (* 2 v)))
from-each may only be used inside expect and is a purely syntactic construct.
This macro can be refer'd to satisfy tooling like clj-kondo.
`(expect expected (from-each [v coll] (f v)))` -- expect this to be true for each element of collection. `(f v)` is the actual result. Equivalent to: `(doseq [v coll] (expect expected (f v)))` `(expect even? (from-each [v (range 10)] (* 2 v)))` `from-each` may only be used inside `expect` and is a purely syntactic construct. This macro can be `refer`'d to satisfy tooling like `clj-kondo`.
(functionally expected-fn actual-fn)(functionally expected-fn actual-fn difference-fn)Given a pair of functions, return a custom predicate that checks that they return the same result when applied to a value. May optionally accept a 'difference' function that should accept the result of each function and return a string explaininhg how they actually differ. For explaining strings, you could use expectations/strings-difference. (only when I port it across!)
Right now this produces pretty awful failure messages. FIXME!
Given a pair of functions, return a custom predicate that checks that they return the same result when applied to a value. May optionally accept a 'difference' function that should accept the result of each function and return a string explaininhg how they actually differ. For explaining strings, you could use expectations/strings-difference. (only when I port it across!) Right now this produces pretty awful failure messages. FIXME!
(in coll)(expect expected (in actual)) -- expect a subset of a collection.
If actual is a hash map, expected can be a hash map of key/value pairs
that you expect to be in the actual result (there may be other key/value
pairs, which are ignored).
If actual is a set, vector, or list, expected can be any value that
you expect to be a member of the actual data.
(expect {:b 2} (in {:a 1 :b 2 :c 3}))
(expect 2 (in #{1 2 3}))
(expect 2 (in [1 2 3]))
in may only be used inside expect and is a purely syntactic construct.
This macro can be refer'd to satisfy tooling like clj-kondo.
`(expect expected (in actual))` -- expect a subset of a collection.
If `actual` is a hash map, `expected` can be a hash map of key/value pairs
that you expect to be in the `actual` result (there may be other key/value
pairs, which are ignored).
If `actual` is a set, vector, or list, `expected` can be any value that
you expect to be a member of the `actual` data.
`(expect {:b 2} (in {:a 1 :b 2 :c 3}))`
`(expect 2 (in #{1 2 3}))`
`(expect 2 (in [1 2 3]))`
`in` may only be used inside `expect` and is a purely syntactic construct.
This macro can be `refer`'d to satisfy tooling like `clj-kondo`.(more & expecteds)(expect (more expected1 ...) actual) -- provide multiple expectations
on actual as a series of expected results.
Equivalent to: (do (expect expected1 actual) ...)
(expect (more int? even?) 42)
more may only be used inside expect and is a purely syntactic construct.
This macro can be refer'd to satisfy tooling like clj-kondo.
`(expect (more expected1 ...) actual)` -- provide multiple expectations on `actual` as a series of expected results. Equivalent to: `(do (expect expected1 actual) ...)` `(expect (more int? even?) 42)` `more` may only be used inside `expect` and is a purely syntactic construct. This macro can be `refer`'d to satisfy tooling like `clj-kondo`.
(more-> & expected-threaded-pairs)(expect (more-> expected1 (threaded1) ...) actual) -- provide multiple
expectations on actual based on threading it into various expressions.
Equivalent to: (do (expect expected1 (-> actual (threaded1))) ...)
(expect (more-> string? (first) int? (second)) ["test" 42])
more-> may only be used inside expect and is a purely syntactic construct.
This macro can be refer'd to satisfy tooling like clj-kondo.
`(expect (more-> expected1 (threaded1) ...) actual)` -- provide multiple expectations on `actual` based on threading it into various expressions. Equivalent to: `(do (expect expected1 (-> actual (threaded1))) ...)` `(expect (more-> string? (first) int? (second)) ["test" 42])` `more->` may only be used inside `expect` and is a purely syntactic construct. This macro can be `refer`'d to satisfy tooling like `clj-kondo`.
(more-of destructuring & expected-actual-pairs)(expect (more-of destructuring expected1 actual1 ...) actual) -- provide
multiple expectations on actual based on binding it against the
destructuring expression (like in a let) and then expecting things about
its subcomponents.
Equivalent to: (let [destructuring actual] (expect expected1 actual1) ...)
(expect (more-of [a b] string? a int? b) ["test" 42])
more-of may only be used inside expect and is a purely syntactic construct.
This macro can be refer'd to satisfy tooling like clj-kondo.
`(expect (more-of destructuring expected1 actual1 ...) actual)` -- provide multiple expectations on `actual` based on binding it against the `destructuring` expression (like in a `let`) and then expecting things about its subcomponents. Equivalent to: `(let [destructuring actual] (expect expected1 actual1) ...)` `(expect (more-of [a b] string? a int? b) ["test" 42])` `more-of` may only be used inside `expect` and is a purely syntactic construct. This macro can be `refer`'d to satisfy tooling like `clj-kondo`.
(side-effects fn-vec & forms)Given a vector of functions to track calls to, execute the body.
Returns a vector of each set of arguments used in calls to those
functions. The specified functions will not actually be called:
only their arguments will be tracked. If you need the call to return
a specific value, the function can be given as a pair of its name
and the value you want its call(s) to return. Functions given just
by name will return nil.
Given a vector of functions to track calls to, execute the body. Returns a vector of each set of arguments used in calls to those functions. The specified functions will not actually be called: only their arguments will be tracked. If you need the call to return a specific value, the function can be given as a pair of its name and the value you want its call(s) to return. Functions given just by name will return `nil`.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |