2013-05-01 16 views
5

Dlaczego nie mogę uzyskać danych wejściowych i sprawdzić, czy nie ma wartości NULL?Testowanie PHPUnit dla wyjścia JSON

Moja metoda I 'm testowania:

/** 
* @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); 
} 

Moje testy:

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

Komunikat o błędzie, zwraca tablicę JSON obiektów:

PHPUnit 3.7.8 przez 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"}]..

Czas: 0 sekund, Pamięć: 10.25Mb

Było 1 awaria:

1) CategoryTest::testGetCategory Failed twierdząc, że nie jest NULL zerowa. Funkcja

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

+0

AssertXXXX jest w zasadzie odwrotnością tego, co myślisz. Na przykład argument assertNotNull powoduje odrzucenie dowodu, gdy tekst ma wartość Null. Twój $ json ma wartość NULL, ponieważ został wygenerowany jako echo, a nie został zwrócony. –

Odpowiedz

5

Twój getCategory() nawiązuje coś:

echo json_encode($data); 

Ale to niczego nie powrócić. Dlatego zmienna $ json będzie mieć wartość zerową w teście.

Prawdopodobnie oznaczało powrót do wartości na koniec funkcji zamiast:

return json_encode($data); 

Aby przetestować wyjścia, trzeba by użyć expectOutputString() lub expectOutputRegex() metod w teście. Aby przetestować dla niepustego wyjście, uważam, że powinien zrobić co następuje:

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

Zobacz phpunit documentation o sposobach dochodzenia wyjście.

+0

Tak, to jest sposób, w jaki powinien powrócić. Mam wywołanie ajax, które pobiera żądanie. Najwyraźniej nie jestem w stanie przetestować tego w ten sposób, więc jak mogę przetestować, że metoda echo coś? – robasc

+0

Zapomniałem wspomnieć, że jest to metoda kontrolera. Ponieważ jest to wynik powrotu, muszę napisać test, aby sprawdzić, czy metoda kontrolera zwraca wynik, ale nie mogę znaleźć żadnych dobrych przykładów lub samouczków. – robasc

+0

ok, więc echo było w istocie tym, czego chciałeś, zredagowałem swoją odpowiedź, aby dodać pewne szczegóły, jak uzyskać wyjście z phpunitem – Thierry