PB功能测试symfony2控制器

时间:2016-07-26 19:40:12

标签: symfony doctrine

我尝试在执行doctrine的控制器上进行功能测试。当我执行我的测试时,它失败了。但当我在我的控制器中评论这一行:“ $ products = $ em-> getRepository(”Couture \ FrontBundle \ Entity \ Produit“) - > findAll()”。 我的考试是成功的。

这是我的控制器:

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

1 个答案:

答案 0 :(得分:0)

当您对该行发表评论时,!$productsfalse,然后您的控制器会返回一个带有application/json内容类型标头的Reponse对象。此响应被视为成功,因为其状态代码为200 OK。

我在这种情况下看到的是使用数据夹具来测试由doctrine 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() );

}
}