如何针对现有(而不是测试)运行测试-Drupal数据库

时间:2019-06-27 07:00:45

标签: phpunit drupal-8

我需要再次在Drupal 8中对现有数据库进行测试。

我已经尝试用phpunit.xml中正确的mysql数据库信息替换默认的sqllite连接信息

这是我的phpunit.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
         bootstrap="test/bootstrap.php"
         beStrictAboutTestsThatDoNotTestAnything="true"
         beStrictAboutOutputDuringTests="true"
         beStrictAboutChangesToGlobalState="true"
         strictConfigSchema="false">
    <testsuites>
        <testsuite name="drupal-composer-project tests">
            <directory>./test/</directory>
        </testsuite>
    </testsuites>
    <php>
        <!-- Set error reporting to E_ALL. -->
        <ini name="error_reporting" value="32767"/>
        <!-- Do not limit the amount of memory tests take to run. -->
        <ini name="memory_limit" value="-1"/>
        <env name="SIMPLETEST_BASE_URL" value="http://localhost"/>
        <env name="SIMPLETEST_DB" value="mysql://user:password@mysql/databasename"/>
        <env name="BROWSERTEST_OUTPUT_DIRECTORY" value=""/>
    </php>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
        </whitelist>
    </filter>
    <listeners>
        <listener class="\Drupal\Tests\Listeners\DrupalListener">
        </listener>
        <!-- The Symfony deprecation listener has to come after the Drupal listener -->
        <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener">
        </listener>
    </listeners>
    <logging>
        <log type="coverage-html" target="../../coverage" charset="UTF-8" yui="true" highlight="true"/>
        <log type="coverage-clover" target="../../clover.xml"/>
        <log type="coverage-crap4j" target="../../crap4j.xml"/>
    </logging>
</phpunit>

当我记录数据库信息时,我看到添加了一个测试前缀,并且该前缀将在现有数据库中创建表。如何使测试直接在自己的数据库和表上运行?

1 个答案:

答案 0 :(得分:0)

如果要在现有数据库上运行测试,则需要使用Drupal Test Traits。这是该测试框架的简介text

但是,正如@DirkScholten所说,您应该避免在现有数据库上运行测试。运行用户验收测试是一个例外,他们需要生产数据库中的数据以模拟最终用户体验。在这种情况下,请确保在隔离的环境中运行测试,以免测试不会向真实用户发送邮件或通过真实服务器上的API进行某些更改。

如果仅在Drupal的测试实例上需要一些自定义设置或字段,那么更好的选择是创建您自己的安装配置文件,并在测试中使用它们。这是instructions

第三个选项是使用config_installer并对自定义站点配置进行测试。从Drupal 8.6开始,您不需要此模块,它位于Drupal的核心。