Consider the following code
(use 'midje.sweet)
(defn x2 [x] (* x x))
(def fs {:x2 x2})
(fact
(x2 1) => "one"
((:x2 fs) 1) => "one"
(against-background
(#'tweetfetcher.core-test/x2 1) => "one"))
which outputs
FAIL at (core_test.clj:177)
Expected: "one"
Actual: 1
FAILURE: 1 check failed. (But 32 succeeded.)
The first check is stubbed while the second use x2 as provided by the hashmap fs.
Considering I rule out referencing, why is (:x2 fs) not stubbed ?
Thanks for insights.
I'm not surprised it works this way. In
(x2 1), it is known compile-time thatx2is the function defined as(defn x2 [x] (* x x)).In
((:x2 fs) 1), we know, compile-time, thatfsis{:x2 x2}, but we don't yet know the result of(:x2 fs). By that I mean the expression(:x2 fs)is not evaluated duringfactexpansion. It probably sees that(:x2 fs)is not a var that resolves to a function and therefore does nothing to associate it with our stub (insideagainst-background).