gpt4 book ai didi

php - Symfony/phpUnit : functional test of a form modifying an entity

转载 作者:行者123 更新时间:2023-12-03 23:56:14 24 4
gpt4 key购买 nike

您将如何对绑定(bind)到实体的表单进行功能测试(不是单元测试)?

语境

假设您有一个实体“Car”,其中包含一个字段“id”和另一个字段“numberPlate”,以及一个用于编辑汽车数据的页面。

汽车 Controller .php:

//...

public function imsiDetailsChangeAction(Request $request)
{
$car_id = $request->get('car_id');
$car = $this->getDoctrine()->getRepository('ClnGsmBundle:Car')->Find($car_id);

if ($simCard != null)
{
$form = $this->createForm(new CarType()), $car);

if($request->isMethod('POST'))
{
$form->bind($request);

if ($form->isValid())
{
$em = $this->getDoctrine()->getManager();
$em->flush();

return $this->redirect($this->generateUrl('car_view', array('car_id' => $car->getId())));
}
}
}
else
{
throw new NotFoundHttpException();
}

return $this->render('SiteBundle:Car:carEdit.html.twig', array('car' => $car, 'form' => $form->createView()));
}

//...

我想要的是

使用 phpUnit 执行以下操作的测试:
  • 创建一个编号为“QWE-456”的汽车实体
  • 使用表单
  • 加载页面
  • 使用爬虫,将表单中的numberPlate替换为“AZE-123”,提交表单
  • 断言我的汽车实体的 numberPlate 现在等于“AZE-123”

  • 我试过的

    (以防万一:我自己的代码有点不同,这是我对汽车示例所做的)

    CarControllerTest.php:
    //...

    public function SetUp()
    {
    //start kernel, stores entity manager in $this->em and client in $this->client
    }

    //...

    public function testEditForm()
    {
    $car = new Car();
    $car->setNumberPlate("QWE-456");

    $this->entityManager->persist($simCard);
    $this->em->flush();

    $crawler = $this->client->request('GET', '/fr/Car/edit/'.$car->getId());
    $this->assertEquals(200, $this->client->getResponse()->getStatusCode());

    $formNode = $crawler->filterXpath("//div[@id='main']//form");
    $form = $formNode->form(array(
    'car[plateNumber]'=>'AZE-123',
    ));

    //var_dump($car->getPlateNumber());
    $this->client->submit($form);
    //var_dump($car->getPlateNumber());
    $this->assertEquals('AZE-123',$car->getPlateNumber);
    }

    我希望这个测试能够通过,并且第二个 var_dump 打印“AZE-123”而不是“QWE-456”。但是我的实体没有被修改。

    我该怎么做?

    最佳答案

    您应该刷新从数据库重新加载它的数据:refresh method为你做,所以试试这个:

      $this->client->submit($form);

    $this->em->refresh($car);

    $this->assertEquals('AZE-123',$car->getPlateNumber);

    我建议您在 HTTP 响应之前检查以验证正确的交互,例如:
        $response = $this->client->getResponse();
    $this->assertTrue($response->isRedirection());

    希望这有帮助

    关于php - Symfony/phpUnit : functional test of a form modifying an entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46609587/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com