2012-02-01 13 views
13

मैं एक Specs2 परीक्षण लिखने की कोशिश कर रहा हूं जो विभिन्न पैरामीटर के जवाब में स्निपेट के आउटपुट का परीक्षण करेगा जो आम तौर पर टेम्पलेट से पारित किया जाएगा , लेकिन मैं यह समझने में सक्षम नहीं हूं कि इसे कैसे किया जाए।स्कैला/लिफ्ट: मैं यूनिट परीक्षण कैसे लिखूं जो विभिन्न मानकों के लिए स्निपेट की प्रतिक्रिया का परीक्षण करते हैं

उदाहरण के लिए

, इस div में टुकड़ा कॉल आउट के साथ:

<div class="lift:Snippet.method?param1=foo"></div> 

मैं टुकड़ा करने के लिए पैरामीटर param1 गुजर रहा हूँ। मेरे टुकड़ा कुछ इस तरह दिखेगा: तो अपने परीक्षण के भीतर

class Snippet { 
    def method(in:NodeSeq):NodeSeq = { 
    val param1 = S.attr("param1") openOr "" 
    param1 match { 
     case "foo" => //do something 
     case "bar" => //do something else 
     case _ => //do yet another thing 
    } 
    } 
} 

, मैं कैसे टुकड़ा अलग param1 का जवाब का परीक्षण करना चाहते मूल्यों

class SnippetTest extends Specification { 
    "Snippet" should { 
    "do something" in { 
     val html = <ul> 
      <li class="first"> 
      <li class="second"> 
      <li class="third"> 
     </ul> 

     //I need to set param1 here somehow 
     val out = Snippet.method(html) 
     //then check that it did what it was supposed to 
     out.something must be "xyz" 
    } 
    } 
} 

मैं param1 कैसे सेट करूँ?

मैं एक बड़ा समय स्केल हूं और न्यूब उठा रहा हूं (पाइथन + डीजेंगो से आ रहा हूं), इसलिए यदि मैं गलत पेड़ को भड़क रहा हूं, तो कृपया मुझे सही पर निर्देशित करें। मुझे लगता है कि यह मामला हो सकता है, मैं पूरे दिन इस पर गुगल रहा हूं और इस सवाल से दूरस्थ रूप से कोई प्रश्न नहीं मिला है।

धन्यवाद,

ब्लेक

उत्तर

11

ठीक है, मैं इस पता लगा मिल गया है। इस सवाल में बहुत रुचि नहीं देखी गई है, लेकिन यदि कोई भी समस्या/प्रश्न के साथ गुजर रहा है, तो यहां यह है कि आप इसे कैसे करते हैं:

लिफ्ट की "एस" ऑब्जेक्ट में हमारे मनमाने ढंग से गुण जोड़े जाने की आवश्यकता है यह हमारे स्निपेट को उन गुणों को देगा जो हम पूछे जाने पर परीक्षण करना चाहते हैं। दुर्भाग्य से, 2 समस्याएं हैं। सबसे पहले, "एस" ऑब्जेक्ट केवल तब प्रारंभ होता है जब एक http अनुरोध प्राप्त होता है। दूसरा, एसएटीआर अपरिवर्तनीय है।

लिफ्ट में एक पैकेज है जिसे मॉकवेब कहा जाता है जो आपको नकली http अनुरोध करने की अनुमति देता है। इस पैकेज के लिए प्रलेखन आमतौर पर परीक्षण सत्र और उपयोगकर्ता लॉग इन और व्हाट्नॉट के बारे में बात करता है, लेकिन यह विनिर्देश परीक्षण के हिस्से के रूप में "एस" शुरू करने के लिए तंत्र भी प्रदान करता है।

एस को शुरू करने वाली पहली समस्या, विशिष्टता की बजाय वेबस्पेक के विस्तार के रूप में हमारी टेस्ट क्लास को परिभाषित करके हल की जाती है (वेबस्पेक mockweb पैकेज का हिस्सा है और विशिष्टता बढ़ाता है), और विनिर्देश परिभाषा के दौरान "withSFor" को कॉल करना, "एस"

दूसरी समस्या, एसएटीआर से अपरिवर्तनीय होने से निपटने वाली दूसरी समस्या "एस" विधि "एटर्स" के साथ हल हो जाएगी। "withAttrs" आपके द्वारा प्रदान किए गए कोड के ब्लॉक को नियमित रूप से विशेषताओं और मानचित्र में आपके द्वारा प्रदान किए गए गुणों के साथ निष्पादित करता है। आपका मनमाना विशेषताओं S.attr से ही उपलब्ध हैं अस्थायी रूप से

यहाँ मेरी मूल प्रश्न से परीक्षण है जो 2 की समस्याओं को हल करने के लिए संशोधित किया गया है:

import net.liftweb.mockweb._ 

class SnippetTest extends WebSpec { 
    "Snippet" should { 
    "do something" withSFor("/") in { 
     val html = <ul> 
      <li class="first"> 
      <li class="second"> 
      <li class="third"> 
     </ul> 

     //here I set param1 
     var m = new HashMap[String, String] 
     m += "param1" -> "foo" 

     val s = new Snippet() 

     //then tell S to execute this block of code 
     //with my arbitrary attributes. 
     //'out' will be the NodeSeq returned by s.method 
     val out = S.withAttrs(S.mapToAttrs(m)){ 
     s.method(html) 
     } 

     //then check that it did what it was supposed to 
     out.something must be "xyz" 
    } 
    } 
} 

संपादित करें: स्पष्टता

+0

ध्यान दें कि यह लग रहा है लिफ्ट 2.4 की तरह, आपके द्वारा उपयोग की जाने वाली वेबस्पेक विशेषता को [स्पेक्स] (https://code.google.com/p/specs/) के रूप में [Specs2] के विपरीत बहिष्कृत करने की आवश्यकता है (http://etorreborre.github.com/ specs2 /)। मुझे एक वेबसाइट (https://gist.github.com/2235088) में एक वेबस्पेक 2 विशेषता मिली है, [पेज "यूनिसेला लिफ्ट विकी पर एक लॉग इन यूजर के साथ यूनिट टेस्टिंग स्निपेट्स" के माध्यम से] (http: // www। assembla.com/wiki/show/liftweb/Unit_Testing_Snippets_With_A_Logged_In_User)। –

+1

पता नहीं है कि यह कम से कम मदद करता है: https://www.assembla.com/wiki/show/liftweb/Testing_Lift_Applications – tyoc213

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