Symfony/phpUnit:表单修改实体的功能测试

Symfony/phpUnit:表单修改实体的功能测试,php,symfony,doctrine-orm,phpunit,Php,Symfony,Doctrine Orm,Phpunit,如何对绑定到实体的表单进行功能测试(而不是单元测试) 上下文 假设您有一个实体“Car”,其中有一个字段“id”和另一个字段“numberPlate”,还有一个用于编辑汽车数据的页面 CarController.php: 我想要什么 使用phpUnit执行以下操作的测试: 创建一个编号为“QWE-456”的汽车实体 用表单加载页面 使用爬虫程序,将表单中的数字板替换为“AZE-123”,然后提交表单 断言我的汽车实体的数字板现在等于“AZE-123” 我试过的 (以防万一:我自己的代码有点不

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

上下文 假设您有一个实体“Car”,其中有一个字段“id”和另一个字段“numberPlate”,还有一个用于编辑汽车数据的页面

CarController.php:

我想要什么 使用phpUnit执行以下操作的测试:

  • 创建一个编号为“QWE-456”的汽车实体

  • 用表单加载页面

  • 使用爬虫程序,将表单中的数字板替换为“AZE-123”,然后提交表单

  • 断言我的汽车实体的数字板现在等于“AZE-123”

我试过的 (以防万一:我自己的代码有点不同,下面是我将如何处理汽车示例)

CarControllerTest.php:

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


我应该怎么做?

您应该刷新数据,从数据库中重新加载数据:为您做,所以尝试以下操作:

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

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

  $this->assertEquals('AZE-123',$car->getPlateNumber);
我建议您在HTTP响应之前进行检查,以验证正确的交互,例如:

    $response = $this->client->getResponse();
    $this->assertTrue($response->isRedirection());

希望这些帮助

非常感谢您的回答,很抱歉没有尽快测试!我不知道这个方法,但我应该知道数据库中的元组在没有更新实体的情况下被修改了。。。但是,这个解决方案仍然不起作用,因为“SQLSTATE[HY000]:一般错误:1没有这样的表:Car”。我认为这是因为内核被再次启动,数据库被刮伤(我在一个测试中尝试执行多个请求时也有类似的错误)。你不应该这样做吗?我是否应该像我在这里的几个答案中看到的那样覆盖默认客户端以更改此行为?(我指的是:在这里找到:(刚才我看到我的问题与此问题重复…)您是否成功创建了测试数据库?如果您登录到测试数据库,您会看到相关的表吗?我认为用于测试的数据库是SQLlite数据库?我测试了在不重新启动内核的情况下重写客户机以允许其他请求(这里跳过第99行,在需要时直接执行doRequest),它就是这样工作的!此外,刷新方法甚至不是必需的。
  $this->client->submit($form);

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

  $this->assertEquals('AZE-123',$car->getPlateNumber);
    $response = $this->client->getResponse();
    $this->assertTrue($response->isRedirection());