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).

Другие вопросы по тегам