Symfony 如何加载端到端测试的测试环境?

mic*_*doo 3 php phpunit symfony

我正在开发另一个使用端到端测试和.env文件的 PHP 项目。但是,在运行测试之前,我需要修改.env文件以指向测试数据库(而不是开发数据库)。当我从事 Symfony 项目时,我认为我不需要这样做,它只是自动加载测试环境。

我从以前使用旧版本的一些经验知道,每个环境曾经有一个不同的前端控制器,例如app.phpapp_dev.php等等,但据我所知,现在情况并非如此。

Symfony 如何知道加载测试环境以进行端到端测试?

msg*_*msg 5

的 Flex 配方phpunit-bridge包含一个将变量设置为的phpunit.xml文件。这会触发 symfony 加载适当的文件。APP_ENVtest.env.test

\n

在测试期间,通常不使用前端控制器,因为桥会实例化一个Request对象并将其直接传递到应用程序内核。但在使用 的端到端测试中PantherTestCase,框架在内置 PHP Web 服务器中启动项目,该服务器仍然由环境变量控制。

\n

这在书中比文档本身的测试章节得到了更好的解释:

\n
\n

$client 变量模拟浏览器。不过,它不是对服务器进行 HTTP 调用,而是直接调用 Symfony 应用程序。此策略有几个好处:它比客户端和服务器之间的往返要快得多,但它还允许测试在每个 HTTP 请求之后内省服务的状态。

\n
\n

黑豹公告中:

\n
\n

但是,WebTestCase 并不使用真正的 Web 浏览器。它用纯 PHP 组件模拟\n。它\xe2\x80\x99甚至不使用 HTTP 协议:它\n创建 HttpFoundation\xe2\x80\x99s 请求对象的实例,将它们传递到\nSymfony 内核,并允许在 HttpFoundation\n返回的响应实例上进行断言应用程序。
\n[...]
\nPanther 的底层拥有:

\n
    \n
  • 使用 localhost:9000 上的内置 PHP Web 服务器启动您的项目
  • \n
  • 启动了库附带的 Chromedriver 版本,以自动化本地 Chrome
  • \n
  • 在无头模式下使用 Chrome 执行测试中定义的浏览场景
  • \n
\n
\n