在Midje中输入内部函数调用

时间:2014-04-09 14:32:40

标签: clojure midje

我正在测试一个使用其他命名空间中的其他两个函数的函数。

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
      result => truthy))

我想从其他命名空间中删除函数,并且我在编写测试时遇到了问题。

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
          (function-that-uses-functions-from-other-namespace)
          (provided (other-namespace/function1 "parameter") => "stub_response"))

但这种方法似乎不起作用。任何提示?是否只是按照Using midje provided in a let clause doesn't stub methods

中的建议在可检查项之前进行评估

3 个答案:

答案 0 :(得分:4)

你可以使用against-background来删除函数调用,不仅是单个事实,还有整个fact形式:

(fact "a test"
      ...
      (against-background
        (other-namespace/function1 "parameter") => "stub_response"))

实际上,这可能也适用于你所关联的问题。

答案 1 :(得分:0)

尝试不使用let,因为它会在prerequisites设置之前立即执行该功能:

(fact "a test"
  (function-that-uses-functions-from-other-namespace) => truthy
  (provided (some-internal-func arg1 arg2) => some-result
            (other-internal-func) => other-result))

您只需要将函数设置为存根require d。它们可以来自另一个名称空间。

请注意,协议方法不能以这种方式存根。

答案 2 :(得分:0)

是否可以使用(prerequisite)?像这样:

(fact "a test"
  (prerequisite (other-namespace-function1 "parameter) => "stub_response")
  (function-that-uses-functions-from-other-namespace) => truthy))

这应该让你为你喜欢的任何旧函数指定返回值,当你运行实际的事实时,它将被重放。

看看fact-wide-prerequisites。我更喜欢这个provided,因为它让我坚持使用当时给定的测试方式,仍然使用与实际检查器相同的语法。