Midje не заглушает функции, предоставляемые хэш-картами
Рассмотрим следующий код
(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"))
какие выводы
FAIL at (core_test.clj:177)
Expected: "one"
Actual: 1
FAILURE: 1 check failed. (But 32 succeeded.)
Первый чек заглушается во время второго использования x2
как предусмотрено хэш-картой fs
,
Учитывая, что я исключаю ссылки, почему (:x2 fs)
не зарезали?
Спасибо за идеи.
1 ответ
Решение
Я не удивлен, что это работает так. В (x2 1)
во время компиляции известно, что x2
функция определяется как (defn x2 [x] (* x x))
,
В ((:x2 fs) 1)
мы знаем, что время компиляции fs
является {:x2 x2}
, но мы еще не знаем результат (:x2 fs)
, Я имею в виду выражение (:x2 fs)
не оценивается во время fact
расширение. Это, вероятно, видит, что (:x2 fs)
не является переменной, которая разрешает функцию и, следовательно, не делает ничего, чтобы связать ее с нашей заглушкой (внутри against-background
).