gpt4 book ai didi

symfony - 在symfony2中使用phpUnit进行测试时如何回滚任何事务

转载 作者:行者123 更新时间:2023-12-01 08:20:33 26 4
gpt4 key购买 nike

我正在使用爬虫测试 Controller ,但是当我发布一个不会产生任何错误的表单时,它会将表单保存在数据库中。

我怎样才能在不更改 Controller 和不测试其他东西的情况下阻止他这样做。

是否有关于此类测试的最佳实践?
我尝试回滚,但在 ControllerTest 中没有更多的事件事务

最佳答案

您需要编写自己的测试客户端类,扩展 Symfony\Bundle\FrameworkBundle\Client。
这是因为默认客户端不会在请求之间共享连接对象(因此您不能在测试客户端之外使用事务)。如果您扩展测试客户端,您可以自己处理事务。

在您的客户端类中,您需要创建静态连接对象,并覆盖方法 doRequest() 以避免每次都创建新的连接对象,而是使用我们的静态连接对象。

这里有很好的描述:

http://alexandre-salome.fr/blog/Symfony2-Isolation-Of-Tests

当您拥有自己的 doRequest 方法时,您只需要处理事务,因此您可以使用 begin 和 rollback 包装 handle() 方法。您的 doRequest 方法可能看起来像这样:

protected function doRequest($request)
{
// here you need create your static connection object if it's doesn't exist yet
// and put it into service container as 'doctrine.dbal.default_connection'

(...)
self::$connection->beginTransaction();
$response = $this->kernel->handle($request);
self::$connection->rollback();
(...)

return $response
}

关于symfony - 在symfony2中使用phpUnit进行测试时如何回滚任何事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408145/

26 4 0