我想知道如何在我正在测试的模块的功能测试中导入配置同步文件。例如,我有一些我想要测试的自定义内容类型,并且config / sync中有许多文件属于定义自定义内容类型的节点模块。
class ArticleControllerTest extends BrowserTestBase {
protected static $modules = ['node', 'dist_source'];
}
在测试的顶部,我定义了成功导入的模块,但它不包括配置同步设置,因此我的自定义内容类型都不存在。如何将这些导入我的测试环境?
答案 0 :(得分:1)
在测试Drupal 8时,我有同样的问题。在阅读了一些文档和教程之后,我尝试了解了几种方法:
$this->configImporter()
有助于将配置从同步导入活动 $this->configImporter()
退出Drupal\Tests\ConfigTestTrait
。并且特征已经在一些基础测试类中使用,例如BrowserTestBase
。
但是,该方法对我不起作用。因为,我使用了雷电安装配置文件。完成配置文件安装后,将存在默认内容。一旦$this->configImporter()
开始导入同步配置,它就会遇到一些实体类型无法更新的错误,因为实体已经存在。
(尚未尝试过)
如果标准配置文件安装了Drupal站点,您可以尝试将同步配置放入测试配置文件中。 Install Profile Generator模块可以帮助您创建测试配置文件。有一个相关问题#2788777包含配置和个人资料
config/install
或config/optional
(为我工作)
已投放的模块始终将配置放入config/install
和config/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测试提供生产配置。