我尝试在执行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()
);
}
}
答案 0 :(得分:0)
当您对该行发表评论时,!$products
为false
,然后您的控制器会返回一个带有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() );
}
}