我有一个扩展WebTestCase的测试。它并没有做很多事情:

namespace Tests\Application\EndToEnd;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class AuthenticationTest extends WebTestCase

    {
        public function testAuthenticationMethodNotAllowed()
        {
            $client = static::createClient();
            self::assertTrue(true);
        }
    }


但是,即使这一点也足以在我运行测试时触发错误:

有1个错误:


  1)
  Tests \ Application \ EndToEnd \ AuthenticationTest :: testAuthenticationMethodNotAllowed
  LogicException:您无法创建功能测试中使用的客户端
  如果BrowserKit组件不可用。尝试运行“ composer
  需要symfony /浏览器套件”。


同时运行composer require symfony/browser-kitcomposer require --dev symfony/browser-kit不能解决问题。

我还尝试了here中提到的修复程序,但没有任何改进。

这是一个已知的问题?我还应该尝试其他方法吗?

===

更新:这是我的test.xml文件中的内容:

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="test.client.parameters" type="collection"></parameter>
    </parameters>

    <services>
        <defaults public="false" />

        <service id="test.client" class="Symfony\Bundle\FrameworkBundle\Client" shared="false" public="true">
            <argument type="service" id="kernel" />
            <argument>%test.client.parameters%</argument>
            <argument type="service" id="test.client.history" />
            <argument type="service" id="test.client.cookiejar" />
        </service>

        <service id="test.client.history" class="Symfony\Component\BrowserKit\History" shared="false" />

        <service id="test.client.cookiejar" class="Symfony\Component\BrowserKit\CookieJar" shared="false" />

        <service id="test.session.listener" class="Symfony\Component\HttpKernel\EventListener\TestSessionListener">
            <tag name="kernel.event_subscriber" />
            <argument type="service_locator">
                <argument key="session" type="service" id="session" on-invalid="ignore" />
            </argument>
        </service>

        <service id="test.service_container" class="Symfony\Bundle\FrameworkBundle\Test\TestContainer" public="true">
            <argument type="service" id="kernel" />
            <argument>test.private_services_locator</argument>
        </service>

        <service id="test.private_services_locator" class="Symfony\Component\DependencyInjection\ServiceLocator" public="true">
            <argument type="collection" />
        </service>
    </services>
</container>

最佳答案

此错误消息不仅在未安装BrowserKit组件时触发,而且在framework.test配置选项不是true时也会触发(因为在这种情况下,将永远不会注册test.client服务)。

您需要确保启用此选项,并且您的测试实际上是在test环境中执行的。

关于php - BrowserKit组件不可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55224246/

10-09 04:16