当前位置: 首页 > 知识库问答 >
问题:

如何在Drupal 8环境中为自定义模块运行PHPUnit测试

东方志尚
2023-03-14

我试图为Drupal 8创建和运行PHPUnit测试。以下是细节:

我的顶级目录,composer.json所在的地方。

Dockerfile          bootstrap.php           composer.lock           phpunit-examples        phpunit.xml.org         web
Jenkinsfile         checkstyle.xml          config              phpunit.xml         scripts
LICENSE             components          drush               phpunit.xml.dist        sonar-project.properties
README.md           composer.json           patches             phpunit.xml.dist.org        vendor

./供应商/bin/phpUnit--version PHPUnit 6.5.14由Sebastian Bergmann和贡献者提供。

phpunit.xml.dist

<?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"
         backupGlobals="false"
         colors="true"
         bootstrap="vendor/autoload.php"
         verbose="true"
        >
    <testsuites>
    <testsuite name="unit">
      <file>./tests/TestSuites/UnitTestSuite.php</file>
    </testsuite>
    <testsuite name="kernel">
      <file>./tests/TestSuites/KernelTestSuite.php</file>
    </testsuite>
    <testsuite name="functional">
      <file>./tests/TestSuites/FunctionalTestSuite.php</file>
    </testsuite>
    <testsuite name="functional-javascript">
      <file>./tests/TestSuites/FunctionalJavascriptTestSuite.php</file>
    </testsuite>
  </testsuites>
</phpunit>

phpunit。xml

<phpunit
         bootstrap="bootstrap.php"
         colors="true"
         strict="true"
         verbose="true"
         beStrictAboutTestsThatDoNotTestAnything="true"
         beStrictAboutOutputDuringTests="true"
         beStrictAboutChangesToGlobalState="true"
         checkForUnintentionallyCoveredCode="false">

<testsuites>
  <testsuit name="Simple Example Test Suite">
   <directory>phpunit-examples/tests</directory>
  </testsuit>
</testsuites>
<php>
  <ini name="error_reporting" value="32767"/>
  <ini name="memory_limit" value="-1"/>
  <env name="SIMPLETEST_BASE_URL" value="http://drupal-8.localhost"/>
  <env name="SIMPLETEST_DB" value="mysql://drupal-8:drupal-8@localhost/drupal-8"/>
  <env name="BROWSERTEST_OUTPUT_DIRECTORY" value="/var/www/sites/default/simpletest"/>
  <includePath>phpunit-examples/src/</includePath>
</php>
</phpunit>

要测试的自定义代码:web/模块/定制/福利/src/福利列表Builder.php

测试位于:web/modules/custom/benefit/tests/src/BenefitListBuilderTest。php

<?php declare(strict_types = 1);

namespace Drupal\Tests\benefit;

use Mockery;
use Mockery\MockInterface;
use PHPUnit\Framework\TestCase;
use Drupal\benefit\BenefitListBuilder;

/**
 * Test basic functionality of My Module.
 *
 * @group benefit
 */
class BenefitListBuilderTest extends UnitTestCase
{
    /** @var BenefitListBuilder */
    private $benefitListBuilder;

    protected function setUp()
    {
    $a = "var_a";
    $b = "var_b";
        $this->benefitListBuilder = new BenefitListBuilder($a,$b);
    }

    public function testMissing()
    {
        $this->fail('Test not yet implemented');
    }
}

现在,我尝试只运行此测试:

$./vendor/bin/phpunit  web/modules/custom/benefit/tests/src/BenefitListBuilderTest.php
PHP Fatal error:  Class 'Drupal\Tests\benefit\UnitTestCase' not found in /Users/syedahmed/BG-REPOS/PHPUNITTEST-BenefitsAPI/BenefitsAPI/web/modules/custom/benefit/tests/src/BenefitListBuilderTest.php on line 15

Fatal error: Class 'Drupal\Tests\benefit\UnitTestCase' not found in /Users/syedahmed/BG-REPOS/PHPUNITTEST-BenefitsAPI/BenefitsAPI/web/modules/custom/benefit/tests/src/BenefitListBuilderTest.php on line 15

我尝试将测试移动到web/modules/custom/benefit/tests/src/Unit/BenefitListBuilderTest下。php,但得到了相同的错误。如何让测试识别UnitTestCase的路径?

更新:我已在PHPStorm中设置了存储库,因此现在我遇到错误:

Error : Class 'Drupal\Tests\BenefitListBuilder' not found

共有1个答案

金亦
2023-03-14

在我看来,@kamal,问题在于您将测试实例化为:使用PHPUnit\Framework\TestCase;但是您使用的是Drupal,所以应该如下所示:使用Drupal\Tests\UnitTestCase;

我希望这有帮助。

 类似资料:
  • 问题内容: 我想检查代码是否正在运行,以便可以进行一些配置。 有功能吗?喜欢: runtime.IsBeingTested() 问题答案: 只需指定您在test的中运行测试即可。例如,在pkg.go中: 在pkg_test.go中: 该技术不仅可以与s 一起使用,还可以与任何数据或函数一起使用。如果您的软件包中有一些变量(在您的情况下为配置变量),则可以在中将其覆盖。

  • 问题内容: 我需要为AngularJS编写一个自定义模块,但是我找不到关于该主题的任何好的文档。如何为AngularJS编写一个可以与他人共享的自定义模块? 问题答案: 在这种情况下,您认为文档无法再为您提供帮助,一个很好的学习方法是查看其他已经构建的模块,看看其他人是如何做到的,他们如何设计架构以及如何将它们集成到其中。他们的应用。 在查看其他人的工作之后,您至少应该有一个起点。 例如,看看任何

  • 我想在任何目录的任何脚本中导入自定义编写的函数,就像在任何脚本中导入请求模块一样。我正在运行Ubuntu和Python 3.9 编辑:我按照本教程完成了我的要求-https://packaging.python.org/tutorials/packaging-projects/

  • 我读过laravel 5.5留档为unittest。据说我们只需要执行phpUnit{如https://laravel.com/docs/5.5/testing}然后我尝试了这个:如何使用phpUnit运行单个测试方法? 但据说“无法打开文件”。然后我尝试了phpunitexampletest,但仍然无法打开该文件。那么这里怎么了。。。?提前谢谢

  • 问题内容: 我有一个名为imutils.py的文件,只有一个定义,即abc(),它返回2个整数的总和。 现在,我想在单独的collab文件中使用此定义,但是我无法使用。 我使用的方法是先将文件imutils.py上传到驱动器,然后将其导入并使用定义。错误提示模块’imutils’没有属性’abc’ 要上传,我首先使用2种方法:首先,我使用驱动器GUI上传,然后我也使用代码尝试了上述方法。两种情况均

  • 需要 10.2.0+ 您可以在*.vue文件中定义自定义语言块。 自定义块的内容将由在vue-loader'选项的loaders对象中指定的加载器处理,然后由组件模块require。 配置类似于[先进的Loader配置](../ configurations / advanced.md)中描述的配置,除了匹配使用标记名称而不是lang`属性。 如果找到一个自定义块的匹配加载器,它将被处理; 否则将