此代码来自默认的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
相关联的值测试上述函数?
答案 0 :(得分:0)
我建议您在发布一般性问题之前阅读一些文档并做出合理的努力。这可能是一个开始http://blog.jayfields.com/2010/08/clojuretest-introduction.html
在您对clojure测试感到有点舒服之后,您可能希望转到https://github.com/marick/Midje/wiki/A-tutorial-introduction-for-Clojure.test-users
享受:)
答案 1 :(得分:0)
首先设置你的路线和处理程序:
(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)
答案 2 :(得分:-1)
我遇到了同样的问题。 直接调用(主页)将返回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))
现在调用主页时,它会将html作为字符串返回。这对于编写单元测试应该更有用。