midje 不对散列图提供的函数存根

midje does not stub functions provided with hashmaps

考虑以下代码

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

第一次检查被存根,而第二次使用哈希映射 fs.

提供的 x2

考虑到我排除了引用,为什么 (:x2 fs) 没有存根?

感谢您的见解。

我对它以这种方式工作并不感到惊讶。在 (x2 1) 中,编译时已知 x2 是定义为 (defn x2 [x] (* x x)).

的函数

((:x2 fs) 1)中,我们知道,编译时,fs{:x2 x2},但我们还不知道(:x2 fs)的结果。我的意思是表达式 (:x2 fs)fact 扩展期间不被评估。它可能看到 (:x2 fs) 不是解析为函数的 var,因此不会将其与我们的存根(在 against-background 内)相关联。