2016-07-26 3 views
-1

Я пытаюсь выполнить функциональный тест на контроллере, который выполняет доктрину. Когда я выполняю свой тест, он терпит неудачу. но когда я прокомментировал в своем контроллере эту строку: «$ products = $ em-> getRepository (« Couture \ FrontBundle \ Entity \ Produit ») -> findAll()". мой тест - успех.PB Функциональный тест Контроллер symfony2

это мой контроллер:

class ProductController extends Controller { 
    /** 
    * Get products 
    * @Route("/products") 
    * @Method("GET") 
    */ 
    public function getAllAction() { 

    $serialize = $this->get('jms_serializer'); 

    $em = $this->getDoctrine(); 

    $products = $em->getRepository('Couture\FrontBundle\Entity\Produit')->findAll(); 

    if (!$products) { 

     $response = new Response(json_encode(array('error' => 'Resources not found for products'))); 
     $response->headers->set('Content-Type', 'application/json'); 
     $response->setStatusCode('400'); 
     return $response; 
    } 

    $response = new Response($serialize->serialize($products, 'json')); 

    $response->headers->set('Content-Type', 'application/json'); 

    return $response; 
    } 
} 

это мой тестовый класс:

class ProductControllerTest extends WebTestCase { 

    public function testGetAll() { 

    $client = static::createClient(); 

    $client->request('GET', $client->getContainer()->get('router')->generate('couture_front_product_getall')); 

    $this->assertEquals(
      200, $client->getResponse()->getStatusCode() 
    ); 
    } 
} 

ответ

0

Когда вы прокомментируете эту строку, !$products является false, а затем контроллер возвращает объект réponse с application/json заголовком контента. Этот ответ считается успешным, потому что его код состояния 200 OK.

То, что я видел, является таким сценарием, это использование данных для проверки объектов, управляемых doctinary entityManager.

Ваш тестовый класс может выглядеть следующим образом (не протестированного кода, просто чтобы дать вам идею позади):

class ProductControllerTest extends WebTestCase { 

public function testGetAll() { 

     $client = static::createClient(); 

     $fixtures = array('Acme\YourBundle\dataFixtures\LoadProductData'); 

     $this->loadFixtures($fixtures); 

     $uri= $this->getUrl('couture_front_product_getall'); 

     $crawler= $client->request('GET',$uri); 


     $this->assertEquals(200,$client->getResponse()->getStatusCode()); 

} 
} 

Я тоже меня ждет эксперта вмешаться и подтвердить. Я просто нашел комментарий слишком короткий, чтобы поделиться тем, что я знаю, и учиться у сообщества. Надеюсь, это поможет

Смежные вопросы