2010-10-11 11 views
6

PHPUnit :: यह सेट कैसे कर सकता है और कुकीज प्राप्त कर सकता है, त्रुटि के बिना परीक्षण किया जा सकता है: हेडर पहले से ही भेजे गए हैं?PHPUnit :: सेट सेट और कुकीज़ प्राप्त करने का तरीका कैसे परीक्षण किया जा सकता है?

उदाहरण कि देना त्रुटि:

PHPUnit_Framework_Error_Warning: हेडर सूचना को संशोधित नहीं कर सकते - पहले से ही द्वारा

MyCookie.php

class MyCookie{ 
public static function createCookie(){ 
     $uid = null; 
     $cookieName='test_cookie'; 
     if(!isset($_COOKIE[$cookieName])){ 
      $uid = unique_hash(); 
      setcookie($cookieName, $uid, 0, '', '', false, true); 
     } 
     else{ 
      $uid=$_COOKIE[$cookieName]; 
     } 
     return $uid; 
    } 
} 

MyCookieTest.php

भेजा हेडर
class MyCookieTest extends PHPUnit_Framework_TestCase{ 
    public function test_createCookie(){ 
      MyCookie::createCookie(); 
      assertThat(isset($_COOKIE['test_cookie']), is(true)); 
      unset($_COOKIE['test_cookie']); 
      MyCookie::createCookie(); 
      assertThat(isset($_COOKIE['test_cookie']), is(true)); 
    } 
} 

धन्यवाद

+0

Btw, आप assertThat का अपना स्वयं का कार्यान्वयन की क्या ज़रूरत है या आप PHPUnit 3.5 के रिलीज उम्मीदवार संस्करण का उपयोग कर रहे हैं? http://sebastian-bergmann.de/archives/896-PHPUnit-3.5-Less-this-Required.html#content –

+0

assertThat है Hamcrest.php लाइब्रेरी है जो phpunit – Yosef

उत्तर

3

अपने PHP स्क्रिप्ट करता है किसी भी उत्पादन, हेडर भेजा जाएगा - और आप कुकीज़ अब और निर्धारित नहीं कर सकते। इससे पहले कि आप किसी HTML (या अन्य आउटपुट) को आउटपुट कर सकें, आपको कुकीज़ पहले भेजना होगा।

यदि आप किसी भी एचटीएमएल को आउटपुट नहीं कर रहे हैं, तो संभवत: यह कहीं भी गहराई से आउटपुट हो रहा है, या यूनिकोड बाइट-ऑर्डर मार्क है। यदि आपका संपादक इसका समर्थन करता है, तो इसे यूटीएफ -8 एन्कोडेड फ़ाइलों में बीओएम शामिल न करने के लिए सेट करें।

अंत में, आप output buffering functions का उपयोग किसी आउटपुट को भेजने में देरी के लिए कर सकते हैं जब तक कि आप अपने सभी शीर्षकों को नहीं भेजते और अपनी कुकी सेट नहीं करते। (इस ठीक आकस्मिक उत्पादन इससे पहले कि आप बफरिंग शुरू हो जाएगा नहीं है, हालांकि)

+0

के साथ जा रहा है मुझे समस्या पता है, लेकिन नहीं हल करें (आपके समाधान काम नहीं करेंगे)। यदि आपके पास समाधान है तो कृपया इसे लिखें। – Yosef

+0

"मेरे समाधान काम नहीं करेंगे" पर्याप्त नहीं है। _ क्यों नहीं? _ वे क्यों काम नहीं करते? क्या गलत है? वे निश्चित रूप से मेरे लिए ठीक काम करते हैं। –

+1

वंशावली के लिए - यह काम नहीं करेगा क्योंकि PHPUnit परीक्षण शुरू करने से पहले सामान लिखता है। एसडीटरआर को आउटपुट रीडायरेक्ट करने में मदद मिल सकती है। [So] देखें (http://stackoverflow.com/questions/5505130/phpunit-output-causing-zend- सत्र- अपवाद) – Jerry

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