如何在Drupal 8功能测试中导入配置同步文件?

时间:2017-07-06 00:59:21

标签: drupal phpunit functional-testing drupal-8 configuration-management

我想知道如何在我正在测试的模块的功能测试中导入配置同步文件。例如,我有一些我想要测试的自定义内容类型,并且config / sync中有许多文件属于定义自定义内容类型的节点模块。

class ArticleControllerTest extends BrowserTestBase {
    protected static $modules = ['node', 'dist_source'];
}

在测试的顶部,我定义了成功导入的模块,但它不包括配置同步设置,因此我的自定义内容类型都不存在。如何将这些导入我的测试环境?

2 个答案:

答案 0 :(得分:1)

在测试Drupal 8时,我有同样的问题。在阅读了一些文档和教程之后,我尝试了解了几种方法:

$this->configImporter()有助于将配置从同步导入活动

$this->configImporter()退出Drupal\Tests\ConfigTestTrait。并且特征已经在一些基础测试类中使用,例如BrowserTestBase

但是,该方法对我不起作用。因为,我使用了雷电安装配置文件。完成配置文件安装后,将存在默认内容。一旦$this->configImporter()开始导入同步配置,它就会遇到一些实体类型无法更新的错误,因为实体已经存在。

创建测试配置文件

(尚未尝试过)

如果标准配置文件安装了Drupal站点,您可以尝试将同步配置放入测试配置文件中。 Install Profile Generator模块可以帮助您创建测试配置文件。有一个相关问题#2788777包含配置和个人资料

将依赖于模块的配置放入config/installconfig/optional

(为我工作)

已投放的模块始终将配置放入config/installconfig/optional。安装模块后,配置也将写入数据库或活动存储。 Documentation - Include default configuration in your Drupal 8 module

在模块中开发配置时,Configuration development有助于将配置导出到已开发模块的config/install

如果有人有相同的经历,请期待与我们分享。

答案 1 :(得分:1)

我在extends BrowserTestBase的测试基类(setUp())中这样做:

    // import config from sync
    $config_path =  '/home/rainer/src/asdent/config/sync';
    $config_source = new FileStorage($config_path);
    \Drupal::service('config.installer')->installOptionalConfig($config_source);

很棒。

就像一个drush cim sync

并在gitlab CI中为我的2末尾自动phpunit测试提供生产配置。