我使用自定义模块在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'];
}
}
答案 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
的核心用户模块。