midje没有提供哈希映射的存根函数

时间:2016-06-04 09:05:49

标签: clojure stub 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时,由hashmap fs提供。

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

感谢您的见解。

1 个答案:

答案 0 :(得分:1)

我对此工作并不感到惊讶。在(x2 1)中,已知编译时x2是定义为(defn x2 [x] (* x x))的函数。

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