tiny/symfony-testing

用于简化测试Symfony Web应用程序的工具。

0.1.0 2018-11-16 09:31 UTC

This package is auto-updated.

Last update: 2024-09-16 21:45:20 UTC


README

用于在基于Symfony框架构建的Web应用程序上执行功能测试的辅助包。

包含两个主要组件

  • TinyTestingBundle。旨在处理功能测试期间显示异常。
  • WebTestCase。基于Symfony的WebTestCase构建,以提供更友好的测试界面。

目前仅支持Symfony 3.4。

TinyTestingBundle

该包启用在Symfony应用程序上运行功能测试时显示实际抛出的异常。它允许所有 Symfony\Component\HttpKernel\Exception\HttpException 被正常处理(例如,对于Twig可以渲染404页面),并将任何其他异常重新抛出,以便由PHPUnit捕获并报告。

如果您制作HTML Web应用程序,那么在dev模式下浏览时,如果发生错误,您将看到一个包含有关异常的所有信息的精美页面(其类、代码、消息、堆栈跟踪等)。在运行测试时,如果实际抛出此异常,则更有价值,因为它可以报告给控制台(或您或您的IDE使用的任何输出)。

当然,您可以在测试用例中这样做

$client->catchExceptions(false);

以强制HttpKernel抛出异常而不是分发kernel.exception事件。

问题是使用此选项需要一些手动工作(不是很多,但定期)。我们必须要么在想要查看异常时关闭捕获(并重新运行测试),要么注意创建(或配置)不同的客户端以支持这两种情况。

最有可能的是,包应该仅注册到test环境

// AppKernel.php
if ($this->getEnvironment() === 'test') {
    $bundles[] = new Tiny\SymfonyTesting\TinyTestingBundle\TinyTestingBundle();
}

WebTestCase

提供一些辅助接口进行功能测试。扩展Symfony的本地 Symfony\Bundle\FrameworkBundle\Test\WebTestCase

setUp()创建客户端实例(可以通过$this->client直接访问,它是受保护的)。所以如果你有自己的setUp(),请确保调用parent::setUp()

一些配置性方法(即在使用请求之前使用),它们会影响所有后续请求。

protected function setHost($host)

设置主机,当请求路由涉及主机要求(如api.example.com/users)时很有用

protected function setHeader($name, $value)

因此可以进行类似$this->setHeader('Authorization', 'Bearer wh.at.ever');的操作

protected function setCookie($name, $value, $expires = null, $path = null, $domain = '', $secure = false, $httponly = false)

提供请求方法

protected request($uri, $method = 'GET', $parameters = [], $files = [], $server = [], $content = '', $changeHistory = true)

基本上与Symfony\Bundle\FrameworkBundle\Client::request相同,除了$method$uri参数是交换的。

一些快捷请求方法

protected function get($uri, $parameters = [])

protected function post($uri, $content = '', $parameters = [])

protected function put($uri, $content = '')

protected function patch($uri, $content = '')

protected function delete($uri, $content = '')

在请求之前,可以使用以下方法设置一些参数

protected function setParameters(array $parameters)

使用此方法设置的请求参数只与下一个后续请求一起发送。

响应和断言

请求后,可以通过$this->responseSymfony\Component\HttpFoundation\Response的实例)访问响应。

目前仅实现了一个针对响应状态码的断言,可以通过$this->assertStatusCode($expectedCode)访问。