我正在测试一个使用其他命名空间中的其他两个函数的函数。
(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
中的建议在可检查项之前进行评估答案 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
,因为它让我坚持使用当时给定的测试方式,仍然使用与实际检查器相同的语法。