这段代码来自默认的luminus模板:
(deftype RenderableTemplate [template params]
Renderable
(render
[this request]
(content-type
(->>
(assoc
params
(keyword (s/replace template #".html" "-selected"))
"active"
:servlet-context
(:context request)
:user-id
(session/get :user-id)
:user
(session/get :user))
(parser/render-file (str template-path template))
response)
"text/html; charset=utf-8")))
(defn render [template & [params]]
(RenderableTemplate. template params))
我需要使用clojure.test:
测试这个函数(defn home-page [& [user]]
(layout/render
"home.html"
{:user user}))
如何使用与键:user
相关联的值测试上述函数?
我建议您在提出这些一般性问题之前阅读一些文档并做出合理的努力。这可以是一个开始http://blog.jayfields.com/2010/08/clojuretest-introduction.html
在您对clojure测试感到满意之后,您可能会想转到https://github.com/marick/Midje/wiki/A-tutorial-introduction-for-Clojure.test-users
享受:)
首先像这样设置路由和处理程序:
(defn home-page [& [user]]
(layout/render
"home.html"
{:user user}))
; setting routes
(defroutes main-routes
(GET "/user/:user" [user] (home-page user)))
然后做单元测试:
基本单元测试(deftest home-page-test
; Check if response code is 200
(is (= 200 (:status (main-routes {:request-method :get :uri "/user/Michael"})))))
或者也可以使用Midje
使用Midje(:use midje.sweet
clojure.test)
(fact "Homepage Test"
(:status (main-routes {:request-method :get :uri "/user/Michael")) => 200)
我也面临同样的问题。直接调用(home-page)将返回一个RenderableTemplate类型,这对于测试是没有用的。
在你的测试中要求:
(:require [capacityplanning.layout :as layout]
[selmer.parser :as parser])
添加以下功能:
(def template-path "templates/")
(defn mockRender [template params]
(parser/render-file (str template-path template) params))
在测试中你可以绑定:
(with-redefs [layout/render mockRender]
(home-page user))
现在,当home-page被调用时,它将返回html作为字符串。