滚动
测试 Drupal 8 模块
第六部分 Drupal 8 基础模块构建实用指南
从 .info 到测试,只讲基础
如果你从一开始就跟随这个 Drupal 8 基础模块构建实用指南,那么现在我们准备进行一些质量控制。如果你只是想跳过并直接上手,你可以从 Drupal 下载 Lorem ipsum 模块。
让我们通过编写几个可以直接在 Drupal 中运行的自定义测试,来检查模块是否按预期工作。
/tests/src/Functional/LoremIpsumTest.php
<?php namespace Drupal\Tests\loremipsum\Functional; use Drupal\Tests\BrowserTestBase; /** * Tests for the Lorem Ipsum module. * * @group loremipsum */ class LoremIpsumTests extends BrowserTestBase { /** * Modules to install. * * @var array */ protected static $modules = array('loremipsum'); /** * A simple user. * * @var \Drupal\user\Entity\User */ private $user; /** * Perform initial setup tasks that run before every test method. */ public function setUp() { parent::setUp(); $this->user = $this->drupalCreateUser(array( 'administer site configuration', 'generate lorem ipsum', )); } }
测试从继承 BrowserTestBase 类开始。需要注意的是,Drupal 会在测试数据库中运行测试,这个数据库会被创建、按需填充,然后销毁。这意味着你可以在开发、预发布,甚至——如果你敢的话!——生产环境中进行测试。
正如你在上面看到的,测试的第一步是进行一些初始设置:定义要测试的模块(这里只测试我们自己的模块)、创建测试用户并赋予必要的权限。
然后我们测试对文本生成页面的访问:
/** * Tests that the Lorem ipsum page can be reached. */ public function testLoremIpsumPageExists() { // 登录。 $this->drupalLogin($this->user); // 生成器测试: $this->drupalGet('loremipsum/generate/4/20'); $this->assertSession()->statusCodeEquals(200); }
以及配置表单:
/** * Tests the config form. */ public function testConfigForm() { // 登录。 $this->drupalLogin($this->user); // 访问配置页面。 $this->drupalGet('admin/config/development/loremipsum'); $this->assertSession()->statusCodeEquals(200); // 测试表单元素是否存在并具有默认值。 $config = $this->config('loremipsum.settings'); $this->assertSession()->fieldValueEquals( 'page_title', $config->get('loremipsum.page_title'), ); $this->assertSession()->fieldValueEquals( 'source_text', $config->get('loremipsum.source_text'), );
接着我们测试配置表单是否可以提交:
// 测试表单提交。 $this->drupalPostForm(NULL, array( 'page_title' => 'Test lorem ipsum', 'source_text' => 'Test phrase 1 \nTest phrase 2 \nTest phrase 3 \n', ), t('Save configuration')); $this->assertSession()->pageTextContains('The configuration options have been saved.');
并断言新值是否生效:
// 测试新值是否存在。 $this->drupalGet('admin/config/development/loremipsum'); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->fieldValueEquals( 'page_title', 'Test lorem ipsum', ); $this->assertSession()->fieldValueEquals( 'source_text', 'Test phrase 1 \nTest phrase 2 \nTest phrase 3 \n', ); } }
运行测试的步骤:
1. 启用核心模块:Testing 和 Lorem ipsum
2. 进入 admin/config/development/testing
3. 选择 “Loremipsum” 测试
4. 点击 “运行测试”
本课就到这里!如果你愿意,可以在 Lorem ipsum 项目页面获取这段代码的副本——请注意,当前开发版本包含了内置的主题支持。此外,如果你有任何问题,欢迎随时联系我。祝编码愉快!