2012-11-08 7 views
5

के साथ कैस्पर जेएस प्रतीक्षाफॉर रिसोर्स हम Casper.js के साथ एक कार्यात्मक परीक्षण के साथ एक छोटी सी समस्या हो रही है।एक आरामदायक एपीआई

हम उसी संसाधन को दो बार अनुरोध करते हैं, पहले जीईटी के साथ और फिर POST विधि के साथ। अब दूसरे संसाधन (POST) की प्रतीक्षा करते समय यह पहले संसाधन से मेल खाता है और सीधे "फिर" फ़ंक्शन पर जाता है।

हम "परीक्षण" फ़ंक्शन में HTTP विधि की जांच करने में सक्षम होना चाहते हैं, इस तरह हम संसाधन को सही तरीके से पहचान सकते हैं। अभी के लिए हम स्टेटस कोड (res.status) का उपयोग करते हैं, लेकिन यह हमारी समस्या को पूरी तरह से हल नहीं करता है, हमें वास्तव में http विधि की आवश्यकता है।

// create new email 
this.click(xPath('//div[@id="tab-content"]//a[@class="button create"]')); 

// GET 
this.waitForResource('/some/resource', 
    function then() { 
     this.test.assertExists(xPath('//form[@id="email_edit_form"]'), 'Email edit form is there'); 

     this.fill('form#email_edit_form', { 
      'email_entity[email]': '[email protected]', 
      'email_entity[isMain]': 1 
     }, true); 

     // POST 
     this.waitForResource(
      function test(res) { 
       return res.url.search('/some/resource') !== -1 && res.status === 201; 
      }, 
      function then() { 
       this.test.assert(true, 'Email creation worked.'); 
      }, 
      function timeout() { 
       this.test.fail('Email creation did not work.'); 
      } 
     ); 
    }, 
    function timeout() { 
     this.test.fail('Email adress creation form has not been loaded'); 
    }); 

या शायद इस परिदृश्य का परीक्षण करने का एक बेहतर तरीका है? यद्यपि यह एक कार्यात्मक परीक्षण है, इसलिए हमें उन सभी चरणों को एक परीक्षण में रखने की आवश्यकता है।

उत्तर

1

res पैरामीटर जो test फ़ंक्शन पर पास किया गया है, में एक आईडी है। मैंने एक सहायक बनाया जो इस आईडी के खिलाफ परीक्षण करता है और इसे ब्लैकलिस्ट करता है, इसलिए एक ही संसाधन दूसरी बार स्वीकार नहीं किया जाएगा।

var blackListedResourceIds = [], 
    testUniqueResource = function (resourceUrl, statusCode) { 
     return function (res) { 
      // check if resource was already loaded 
      var resourceFound = res.url.search(resourceUrl) !== -1; 

      // check statuscode 
      if (statusCode !== undefined) { 
       resourceFound = resourceFound && res.status === statusCode; 
      } 

      // check blacklisting 
      if (!resourceFound || blackListedResourceIds[res.id] !== undefined) { 
       return false; 
      } else { 
       blackListedResourceIds[res.id] = true; 
       return true; 
      } 
     }; 
    }; 
1

आप कुछ क्वेरी स्ट्रिंग को जोड़ने के लिए है, इसलिए ढेर के साथ जोड़ दिया एक नया संसाधन पैदा करने प्रपत्र कार्रवाई url बदलने की कोशिश कर सकते हैं। इस तरह से किया जा सकता है:

casper.thenEvaluate(function() { 
    var form = __utils__.findOne('#email_edit_form'); 
    form.setAttribute('action', form.getAttribute('action') + '?plop'); 
}); 

हालांकि यह एक हैक है, और कार्यात्मक परीक्षण कभी भी इस तरह हासिल नहीं किया जाना चाहिए। आइए आशा करते हैं कि भविष्य में प्रतिक्रिया वस्तुओं में अधिक जानकारी शामिल की जाएगी।

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