2012-02-01 16 views
5

में एक स्निपेट का परीक्षण करना मैं एक साधारण स्निपेट बना रहा हूं जो Box[String] को एक सहायक वर्ग के लिए उपयोगकर्ता-एजेंट के अनुरोध के साथ पास करना चाहिए जो सीएसएस वर्गों को वापस भेजता है जिसे HTML तत्व में जोड़ा जाना चाहिए। मैं ऐसा इसलिए कर रहा हूं क्योंकि लिफ्ट को एचटीएमएल 5boilerplate में सशर्त टिप्पणियों के साथ एचटीएमएल प्रतिक्रिया प्रदान करने में मुश्किल लगती है। यह वही है मैं अब है और यह काम करता है:लिफ्ट

object LiftBoilerplateSpecs extends Specification { 

    val session = new LiftSession("", randomString(20), Empty) 

    "LiftBoilerplate" should { 
    "add 'no-js' to the class of an html tag element" in { 

     val snippet = new LiftBoilerplate 
     val result = snippet.render(<html><head></head><body>test</body></html>) 

     result must ==/(<html class="no-js"><head></head><body>test</body></html>) 
    } 
    } 
} 

इस परीक्षा में विफल रहता है के बाद से S.requestEmpty है:

class LiftBoilerplate { 

    def render = "html [class+]" #> getClassForUserAgent(S.request) 

    private def getClassForUserAgent(request:Box[Req]) = request match { 
     case Full(r) => LiftBoilerplateHelper.getHtmlClass(r.userAgent) 
     case _ => "" 
    } 
} 

मेरे समस्या यह है कि मैं इस तरह के लिए एक इकाई परीक्षण लिखने के लिए चाहते हैं। उपयोगकर्ता के साथ एक मॉक किए गए अनुरोध के साथ स्निपेट की आपूर्ति करने के लिए मुझे क्या करना चाहिए?

अब तक मैं http://www.assembla.com/spaces/liftweb/wiki/Unit_Testing_Snippets_With_A_Logged_In_User
और
http://www.assembla.com/spaces/liftweb/wiki/Mocking_HTTP_Requests
पर ध्यान दिया है, लेकिन मुझे समझ नहीं आता कि कैसे अपने लक्ष्य को हासिल करने के लिए।

उत्तर

3

अनुरोध करने के लिए और प्रत्येक परीक्षा उदाहरण में स्वचालित रूप से इसे लागू आप विशेषता AroundExample उपयोग करने के लिए एक S.init कॉल में शामिल प्रत्येक परीक्षण रैप करने के लिए की आवश्यकता होगी:

object LiftBoilerplateSpecs extends Specification with AroundExample { 

    val session = new LiftSession("", randomString(20), Empty) 

    def makeReq = { 
    val mockRequest = new MockHttpServletRequest("http://localhost") 
    mockRequest.headers = Map("User-Agent" -> List("Safari")) 

    new Req(Req.NilPath, "", GetRequest, Empty, new HTTPRequestServlet(mockRequest, null), 
     System.nanoTime, System.nanoTime, false, 
    () => ParamCalcInfo(Nil, Map(), Nil, Empty), Map()) 
    } 

    def around[T <% Result](t: => T) = S.init(makeReq, session)(t) 

    "LiftBoilerplate" should { 
    "add 'no-js' to the class of an html tag element" in { 

     val snippet = new LiftBoilerplate 
     val result = snippet.render(<html><head></head><body>test</body></html>) 

     result must ==/(<html class="no-js"><head></head><body>test</body></html>) 
    } 
    } 
} 
+0

बहुत बढ़िया है, लेकिन जहां उपयोगकर्ता एजेंट सेट है ? इसे 'ParamCalcInfo' को दिए गए' मानचित्र 'में जोड़ा जाना चाहिए? –

+0

नहीं, Req() का 5 वां परम एक HttpRequest है। आपको वांछित शीर्षलेख (उदा। उपयोगकर्ता-एजेंट) –

+0

के साथ इसका एक उदाहरण पास करना चाहिए, मैंने मॉक किए गए अनुरोध को दिखाने के लिए उत्तर अपडेट किया है। –

संबंधित मुद्दे