Midje 在 Compojure / Ring 处理程序中不提供存根功能
Midje provided not stubbing function in Compojure / Ring handler
我正在尝试使用 Midje 在处理程序单元测试中存根视图,但我对 Midje(已提供)的使用显然不正确。
我已将视图简化并内联到处理程序中的(内容)函数:
(ns whattodo.handler
(:use compojure.core)
(:require [whattodo.views :as views]))
(defn content [] (views/index))
(defn index [] (content))
(defroutes app
(GET "/" [] (index)))
我正在尝试使用
对其进行测试
(ns whattodo.t-handler
(:use midje.sweet)
(:use ring.mock.request)
(:use whattodo.handler))
(facts "It returns response"
(let [response (app (request :get "/"))]
(fact "renders index view" (:body response) => "fake-html"
(provided (#'whattodo.handler/content) => (fn [] "fake-html")))))
我原以为被调用的存根函数会返回 'fake-html' 并因此通过单元测试,但相反,测试失败了,因为调用了真实的实现 - 调用了真实的视图。
您不需要功能快捷方式,只需使用 (content) => ...
。正如您现在拥有的那样,midje 期望您的代码按字面意义调用 (#content)
,但您的 index
函数调用 (content)
。您对 midje 语法的困惑可能是您希望将预期结果分配给函数名称,但事实并非如此。您必须替换确切的电话。也就是说,如果您的 index
函数会调用 content
并带有一些参数,您也必须考虑到这一点,例如通过 (provided (content "my content") => ...)
我今天发现我混淆了我的范围 - 引入响应的 let 块在包含所提供的事实调用之外。因此响应是在调用 provided 之前创建的。
通过此早期测试的工作代码改为使用反后台调用
(facts "It returns response"
(against-background (whattodo.handler/content) => "fake-html")
(let [response (app (request :get "/"))]
(fact "renders index view"
(:body response) => "fake-html")))
我正在尝试使用 Midje 在处理程序单元测试中存根视图,但我对 Midje(已提供)的使用显然不正确。
我已将视图简化并内联到处理程序中的(内容)函数:
(ns whattodo.handler
(:use compojure.core)
(:require [whattodo.views :as views]))
(defn content [] (views/index))
(defn index [] (content))
(defroutes app
(GET "/" [] (index)))
我正在尝试使用
对其进行测试(ns whattodo.t-handler
(:use midje.sweet)
(:use ring.mock.request)
(:use whattodo.handler))
(facts "It returns response"
(let [response (app (request :get "/"))]
(fact "renders index view" (:body response) => "fake-html"
(provided (#'whattodo.handler/content) => (fn [] "fake-html")))))
我原以为被调用的存根函数会返回 'fake-html' 并因此通过单元测试,但相反,测试失败了,因为调用了真实的实现 - 调用了真实的视图。
您不需要功能快捷方式,只需使用 (content) => ...
。正如您现在拥有的那样,midje 期望您的代码按字面意义调用 (#content)
,但您的 index
函数调用 (content)
。您对 midje 语法的困惑可能是您希望将预期结果分配给函数名称,但事实并非如此。您必须替换确切的电话。也就是说,如果您的 index
函数会调用 content
并带有一些参数,您也必须考虑到这一点,例如通过 (provided (content "my content") => ...)
我今天发现我混淆了我的范围 - 引入响应的 let 块在包含所提供的事实调用之外。因此响应是在调用 provided 之前创建的。
通过此早期测试的工作代码改为使用反后台调用
(facts "It returns response"
(against-background (whattodo.handler/content) => "fake-html")
(let [response (app (request :get "/"))]
(fact "renders index view"
(:body response) => "fake-html")))