サービスとカスタムコンテンツタイプを定義するカスタムモジュールがあります。サービスの機能テストを作成しました。現在、代わりにカーネルテストを記述できるかどうかを確認しています。
私が遭遇している問題は、私のカスタムコンテンツタイプに(当然)カスタムフィールドがあることです。カーネルテスト環境でそのタイプのコンテンツを作成すると、Drupalがカスタムフィールドを認識しません。
public static $modules = array('my_custom_module', 'node');
何が欠けていますか?これらのカスタムフィールドが認識されるように、インストールするために言う必要があるスキーマや、呼び出す必要があるその他のメソッドがあると思います。
_<?php
namespace Drupal\Tests\my_custom_module\Kernel;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\node\Entity\Node;
/**
* Tests the my custom service.
*
* @group my_custom_module
*/
class MyCustomServiceKernelTest extends EntityKernelTestBase {
/**
* Modules to install.
*
* @var array
*/
public static $modules = array('my_custom_module', 'node');
/**
* {@inheritdoc}
*/
public function setUp() {
parent::setup();
$user = $this->createUser();
$container = \Drupal::getContainer();
$container->get('current_user')->setAccount($user);
// Create some aquifer pieces of content
$node = Node::create(array(
'title' => t('Some title'),
'type' => 'my_custom_content_type',
'language' => 'en',
'field_my_custom_field_1' => 'Put stuff here',
'field_my_custom_field_2' => 'more stuff',
'field_my_custom_field' => 1000000,
));
$node->save();
$reloaded_entity = $this->reloadEntity($node);
$this->assertSame('debug', $reloaded_entity);
}
}
_
Debug assertステートメントは、再ロードされたエンティティにカスタムフィールドが含まれていないことを示しています。
これらのフィールドを_Node::create
_ロジックで渡す代わりに$node->set('field_my_custom_field_1', 'some value')
ステートメントをコードに挿入すると、フィールド名が無効であるというエラーが発生します。
カーネルテストでは、インストールする構成を指定する必要があります。たとえば、テストのsetUp()
メソッドには次のようなものが必要です。
$this->installConfig(['my_custom_module']);
これはモジュールの配列を取るため、おそらく追加のモジュールを指定する必要があります(filter
、node
、およびfield
などの可能性があります)。
これは、フィールド構成がモジュールのconfig/install
ディレクトリにバンドルされていることを前提としています。