2011-11-11 55 views
1

我寫了下面的Midje測試:Midje,只要不工作,我希望

(fact (followers-minus-friends ...name...) => ["Dude"] 
     (provided (idset show-followers ...name...) => #{1 2 3} 
       (idset show-friends ...name...) => #{1 2} 
       (userinfos #{3}) => [{:screen_name "Dude"}])) 

測試功能(在不同的命名空間):

(defn followers-minus-friends [screenname] 
    (let [difference-ids (difference (idset show-followers screenname) 
            (idset show-friends screenname)) 
     userinfos (userinfos difference-ids)] 
    (map :screen_name userinfos))) 

測試可以非常似乎沒用,但我只是想習慣Midje。不知何故,函數idset只是被執行,我想通過在provided-clause中提供一個返回值來阻止它。這可能是什麼解釋?

編輯:我在這裏上傳的項目Github上,如果你想嘗試重現上述情況:https://github.com/Borkdude/twitter-utils

+0

不知道該功能的詳細經過測試我試圖重現與https://gist.github.com/1359355的情況下,我認爲功能不執行 – jneira

+0

@jneira:增加了一些更多的細節。 –

+0

@jneira:項目到現在爲止,在github上:https://github.com/Borkdude/twitter-utils –

回答

2

的問題是,該功能idset是在源命名空間私密性。在測試文件中,您將其嵌入到測試名稱空間中。您現在有兩個不同的瓦爾那點相同的功能:

#'twitter-utils.core/idset 
#'twitter-utils.test.core/idset 

provided,你將覆蓋第二個變種指向的先決條件功能。但是,函數followers-minus-friends仍然指向第一個變量。這不會被覆蓋,所以你得到原來的功能。

路由周圍private聲明一個常見的成語是使用全VAR名,如上述。所以你會期望這個工作:

(fact (followers-minus-friends ...name...) => ["Dude"] 
     (provided (#'twitter-utils.core/idset show-followers ...name...) => #{1 2 3} 
       (#'twitter-utils.core/idset show-friends ...name...) => #{1 2} 
       (userinfos #{3}) => [{:screen_name "Dude"}])) 

它雖然沒有,但。我認爲這是Midje的一個bug。至少,我不能直接看到支持這種做法的危害。我會提交一張票。

既然這樣,你需要做idset公衆。

相關問題