2011-11-11 35 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公众。