【发布时间】:2020-12-31 16:44:34
【问题描述】:
我正在尝试测试与用户实体上的自定义字段相关的方法的功能。 当我尝试在单元测试的 setup 方法中设置这些字段的值时,我收到错误:字段 * 未知。
我的初始测试如下所示:
namespace Drupal\my_module\Entity;
use Drupal\Tests\BrowserTestBase;
class UserTest extends BrowserTestBase
{
/** @var \Drupal\my_module\Entity\User|false */
protected $user;
protected static $modules = ['field', 'user', 'commerce_payment', 'my_module'];
protected $strictConfigSchema = FALSE;
public function setUp() {
parent::setUp();
$this->user = $this->drupalCreateUser();
$this->user->addRole('member');
$this->user->set('field_user_abc', [['value' => '123']]);
}
public function testInstance1() {
$this->assertNotEmpty($this->user->get('field_user_abc')->get(0)->getValue());
}
}
在 setup 方法中的 ->set() 调用失败。
如果 Drupal 使用我的项目数据库进行引导,我真的不明白为什么我需要重新创建该字段。但是,我在一些相关的帖子中读到可能是这种情况。按照/core/modules/user/tests/src/Functional/UserCreateTest.php中的例子,我尝试了以下,但结果是一样的......
namespace Drupal\my_module\Entity;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Tests\BrowserTestBase;
class UserTest extends BrowserTestBase
{
protected $user;
protected static $modules = ['field', 'user', 'commerce_payment', 'my_module'];
protected $strictConfigSchema = FALSE;
public function setUp() {
parent::setUp();
$this->user = $this->drupalCreateUser();
$this->user->addRole('member');
$this->drupalLogin($this->user);
// Create a field.
$field_name = 'field_user_abc';
FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => 'user',
'module' => 'core',
'type' => 'string',
'cardinality' => 1,
'locked' => FALSE,
'indexes' => [],
'settings' => [
'max_length' => 14,
'is_ascii' => false,
'case_sensitive' => false,
],
])->save();
FieldConfig::create([
'field_name' => $field_name,
'entity_type' => 'user',
'label' => 'ABC',
'bundle' => 'user',
'description' => '',
'required' => FALSE,
'settings' => [],
])->save();
$this->user->set($field_name, [['value' => '123']]);
}
public function testInstance1() {
$this->assertNotEmpty($this->user->get('field_user_abc')->get(0)->getValue());
}
}
【问题讨论】:
标签: unit-testing drupal-8