当我使用外部 let 子句来构建一些定义和调用进行测试时,存根不会按我预期的方式工作。例如:
本次测试失败
(fact "blah"
(let [x (meth1 123)]
x => 246
(provided
(meth2 123) => 246)))
Run Code Online (Sandbox Code Playgroud)
有了这个代码
(defn meth2 [x]
(prn "meth2" x)
(* 3 x))
(defn meth1 [x]
(let [y (meth2 x)]
y))
Run Code Online (Sandbox Code Playgroud)
我不应该使用letmidje 语句吗?我不明白如何在不删除let.
首先,如果由于返回函数而meth2正确存根,您的测试甚至会失败,因此事实永远不会成立。(fn [] x)(fn [] x) => 246
其次,我认为仅在执行事实的左侧/右侧provided时才用于存根函数调用。在你的情况下,这是(并且已经在那时进行了评估),以及(这是恒定的)。永远不会在您的事实背景下被调用,只会事先被调用。(fn [] x)x246meth1
要改变这一点,您可以执行以下两件事之一。要么你制作let事实左侧的部分:
...
(let [x (meth1 123)] x) => 246
...
Run Code Online (Sandbox Code Playgroud)
或者您创建x一个在测试事实时进行评估的函数:
...
(let [x #(meth1 123)] (x)) => 246
...
Run Code Online (Sandbox Code Playgroud)
我认为没有办法真正看到 provided实际情况,即像这样:
(let [x (meth1 123)]
x => 369
(let [...]
x => 246
(provided
(meth2 123) => 246))))
Run Code Online (Sandbox Code Playgroud)
包装let事实似乎是在第一个事实被触及之前执行的。
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |