我想问一下Drupal 8的PHPUnit

时间:2018-02-28 07:16:26

标签: drupal phpunit drupal-8

我使用自定义模块在Drupal 8中创建了Block。

是否可以使用PHPUnit实现此功能? 如果你能实现它,请告诉我如何。

我想在下面用PHPUnit实现测试。

如果你能回复是否可能,我会很高兴。

moduleNameBlock.php     

/**
 * @file
 * create block
 */

namespace Drupal\moduleName\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Url;

/**
 *
 * Provides a 'testBlock' block.
 * @Block(
 *   id = "test_block",
 *   admin_label = @Translation("Test"),
 *   category = @Translation("Menu"),
 * )
 */
class moduleNameBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build()
  {
    $build = [];
    $url   = '';
    $nid   = '';

    $nid = $this->getCurrentUserNode();
    if ( !empty($nid) ) {
      $url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
    }
    $block = [
      '#theme' => 'block_theme',
      '#url'   => $url,
      '#nid'   => $nid,
      '#cache' => [
        'max-age' => 0
      ]
    ];
    $build['test_block'] = $block;
    return $build;
  }

  /**
   * The node associated with the user
   * @return nid
   */
  private function getCurrentUserNode() {
    $user_id = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
    $nid     = $user_id->get('field_name')->getValue();

    return $nid[0]['target_id'];
  }  
}

1 个答案:

答案 0 :(得分:0)

是的,可以通过编写PHPUnit Functional测试来实现。

在模块目录中,创建以下结构/tests/src/Functional,然后创建类似ModuleNameBlockTest.php的文件,然后可以将块放置在setUp函数中,并创建测试以测试该块。

<?php

namespace Drupal\Tests\my_module_name\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Class ModuleNameBlockTest.
 *
 * @package Drupal\Tests\my_module_name\Functional
 * @group my_group
 */
class ModuleNameBlockTest extends BrowserTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = ['block', 'my_module_name'];

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $adminUser = $this->drupalCreateUser(['administer blocks']);
    $this->drupalLogin($adminUser);
    $this->drupalPlaceBlock('my_block_name');
    $this->drupalLogout($adminUser);
  }

  /**
   * Test the block.
   */
  public function testMyAwesomeBlock() {
    // Your test logic here.
  }

}

对于某些示例,您始终可以查看Drupal的源代码。例如。 UserBlocksTest.php的核心用户模块。