2013-05-01 37 views
5

Tại sao tôi không thể lấy đầu vào và kiểm tra nếu nó không rỗng?Kiểm tra PHPUnit cho Đầu ra JSON

Phương pháp của tôi Tôi đang thử nghiệm:

/** 
* @method: getCategory 
* retrieves the categories 
* @return json category data 
*/ 
public function getCategory() { 

    $cat = $this->em->getRepository('Entities\Category')->findAll(); 
    $data = array(); 
    foreach ($cat as $res) { 
     $data[] = array(
      'catId' => $res->__get('catId'), 
      'category' => $res->__get('category'), 
      'item' => $res->__get('item') 
     ); 
    } 
    echo json_encode($data); 
} 

thử nghiệm của tôi:

/** 
* @covers Category::getCategory 
* @todo Implement testGetCategory(). 
*/ 
public function testGetCategory() { 
    $json = $this->object->getCategory(); 
    $this->assertNotNull($json); 
} 

Thông báo lỗi, nó sẽ trả về một mảng JSON của các đối tượng:

PHPUnit 3.7.8 bởi Sebastian Bergmann.

F[{"catId":1,"category":"FLORALS2","item":"RED ROSES"}, {"catId":2,"category":"TENTS","item":"12X14"}, {"catId":3,"category":"FLORAL","item":"WHITE ROSES"}, {"catId":4,"category":"TENTS","item":"15X24"}, {"catId":5,"category":"CHAIRS","item":"BLACK CHAIR"}, {"catId":6,"category":"CHAIRS","item":"RED CHAIRS"}, {"catId":7,"category":"TENTS","item":"23X23"}, {"catId":8,"category":"CANDLES","item":"RED CANDLES"}, {"catId":9,"category":"CANDLES","item":"WHITE CANDLES"}, {"catId":10,"category":"CANDLES","item":"BLACK CANDLES"}, {"catId":11,"category":"CANDLES","item":"ORANGE CANDLES"}, {"catId":12,"category":"TABLE","item":"4X8 TABLE"}, {"catId":13,"category":"DRAPERYS","item":"24\" WHITE LINEN"}, {"catId":14,"category":"LINEN","item":"WHITE CURTAINS"}, {"catId":17,"category":"DRAPERY","item":"SILK TABLE CLOTH"}, {"catId":18,"category":"FLORAL","item":"ORANGE DAISIES"}]..

Thời gian: 0 giây, Bộ nhớ: 10.25Mb

Có 1 thất bại:

1) CategoryTest::testGetCategory Không khẳng định vô đó không phải là null.

/var/www/praiseDB/tests/controller/CategoryTest.php:42

+0

Xác nhậnXXXX về cơ bản là ngược lại những gì bạn đang suy nghĩ. Ví dụ, xác nhậnNotNull sẽ ném xác nhận khi văn bản là Null. $ Json của bạn là NULL vì nó đã được echo'd, không trả lại. –

Trả lời

5

getCategory của bạn() chức năng lặp lại một cái gì đó:

echo json_encode($data); 

Nhưng nó không trả lại bất cứ điều gì. Do đó biến $ json sẽ không có trong thử nghiệm của bạn.

Bạn có thể có nghĩa là để trả về giá trị ở phần cuối của hàm thay vì:

return json_encode($data); 

Để kiểm tra đầu ra, bạn sẽ cần phải sử dụng các phương pháp expectOutputString() hoặc expectOutputRegex() trong thử nghiệm của bạn. Để kiểm tra đầu ra không trống, tôi tin rằng những điều sau đây nên làm:

/** 
* @covers Category::getCategory 
* @todo Implement testGetCategory(). 
*/ 
public function testGetCategory() { 
    $this->expectOutputRegex('/./'); 
    $this->object->getCategory(); 
} 

Xem chi tiết về cách xác nhận đầu ra.

+0

Vâng, đây là cách mà nó phải trả lại. Tôi có một cuộc gọi ajax nhận được yêu cầu. Rõ ràng tôi không thể kiểm tra nó theo cách này, vậy làm cách nào để kiểm tra phương pháp đó có làm lại điều gì đó? – robasc

+0

Quên đề cập đến đây là phương pháp điều khiển. Vì đây là đầu ra trả về, tôi cần phải viết một bài kiểm tra để xác minh rằng phương thức bộ điều khiển trả về đầu ra nhưng tôi không thể tìm thấy bất kỳ ví dụ hay hướng dẫn nào tốt. – robasc

+0

ok, do đó, echoing đã thực sự những gì bạn muốn, tôi chỉnh sửa câu trả lời của tôi để thêm một số chi tiết về cách khẳng định đầu ra với phpunit – Thierry

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