2010-10-11 26 views
6

PHPUnit :: Cách có thể đặt và nhận cookie, kiểm tra mà không gặp lỗi: tiêu đề đã được gửi bởi?PHPUnit :: Làm cách nào để có thể đặt và nhận cookie, thử nghiệm?

Ví dụ rằng cho lỗi:

PHPUnit_Framework_Error_Warning: Không thể sửa đổi thông tin tiêu đề - headers already sent bởi

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)); 
    } 
} 

Cảm ơn

+0

Btw, bạn có thực hiện của riêng bạn assertThat hoặc bạn đang sử dụng một phiên bản Release Candidate của PHPUnit 3.5? http://sebastian-bergmann.de/archives/896-PHPUnit-3.5-Less-this-Required.html#content –

+0

assertĐó là thư viện Hamcrest.php đi với phpunit – Yosef

Trả lời

3

Nếu kịch bản PHP của bạn không bất kỳ sản lượng, tiêu đề sẽ được gửi - Và bạn không thể đặt cookie nữa. Bạn phải gửi cookie trước tiên trước khi bạn có thể xuất bất kỳ HTML nào (hoặc đầu ra khác).

Nếu bạn không xuất ra bất kỳ HTML nào, thì đó có thể là khoảng trắng ở đâu đó vô tình là đầu ra, hoặc Dấu Byte-Order Unicode. Nếu trình soạn thảo của bạn hỗ trợ nó, hãy đặt nó không bao gồm BOM trong các tệp được mã hóa UTF-8.

Cuối cùng, bạn có thể sử dụng output buffering functions để trì hoãn việc gửi bất kỳ đầu ra nào cho đến khi bạn đã gửi tất cả tiêu đề và đặt cookie của mình. (Điều này sẽ không sửa chữa tình cờ ra trước khi bạn bắt đầu đệm, mặc dù)

+0

Tôi biết vấn đề, nhưng không phải cách giải quyết điều đó (Giải pháp của bạn sẽ không hoạt động). Nếu bạn có giải pháp xin vui lòng viết nó. – Yosef

+0

"Giải pháp của tôi sẽ không hoạt động" là không đủ. _Tại sao không? _ Tại sao họ không làm việc? Chuyện gì vậy? Họ chắc chắn làm việc cho tôi tốt. –

+1

Đối với hậu thế - nó sẽ không hoạt động vì PHPUnit viết công cụ trước khi nó bắt đầu thử nghiệm. Chuyển hướng đầu ra để sdterr có thể giúp đỡ. Xem [như vậy] (http://stackoverflow.com/questions/5505130/phpunit-output-causing-zend-session-exceptions) – Jerry

Các vấn đề liên quan