【问题标题】:Midje, provided not working as I expectMidje,如果不能按我预期的那样工作
【发布时间】:2011-11-27 05:34:11
【问题描述】:

我已经编写了以下 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 刚刚被执行,我想通过在提供的子句中提供返回值来防止这种情况。对此有何解释?

编辑:我已经在这里把项目上传到Github,以防你想尝试重现上述情况:https://github.com/Borkdude/twitter-utils

【问题讨论】:

标签: clojure midje


【解决方案1】:

问题在于函数idset 在您的源名称空间中是私有的。在测试文件中,您将其实习在测试命名空间中。您现在有两个 不同的 变量指向同一个函数:

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

provided 中,您将覆盖第二个var 以指向一个先决条件函数。但是,函数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 中的一个错误。至少,我无法立即看出支持它会带来什么危害。我会提交一张票。

就目前而言,您需要公开idset

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多