我需要再次在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>
当我记录数据库信息时,我看到添加了一个测试前缀,并且该前缀将在现有数据库中创建表。如何使测试直接在自己的数据库和表上运行?
答案 0 :(得分:0)
如果要在现有数据库上运行测试,则需要使用Drupal Test Traits。这是该测试框架的简介text。
但是,正如@DirkScholten所说,您应该避免在现有数据库上运行测试。运行用户验收测试是一个例外,他们需要生产数据库中的数据以模拟最终用户体验。在这种情况下,请确保在隔离的环境中运行测试,以免测试不会向真实用户发送邮件或通过真实服务器上的API进行某些更改。
如果仅在Drupal的测试实例上需要一些自定义设置或字段,那么更好的选择是创建您自己的安装配置文件,并在测试中使用它们。这是instructions。
第三个选项是使用config_installer并对自定义站点配置进行测试。从Drupal 8.6开始,您不需要此模块,它位于Drupal的核心。