私のBehatテストは次のように始まります。
@api
Scenario: Testing user
Given users:
| name | pass | mail | status | roles | field_lines_ref |
| test | test | [email protected] | 1 | Tester | Line Name |
field_lines_refはノードへのエンティティ参照です。ユーザーは作成されますが、Lines Referenceフィールドは入力されません。ノードIDも使用してみましたが、機能しませんでした。
注意すべき点の1つは、「ライン名」を作成したノードが既にあり、ロジック(ノードIDに基づく)が適切であるため、正確なノードを使用する必要があることです。
エンティティ参照フィールドがある場合は、エンティティの名前/タイトル/ラベルフィールドでエンティティを参照する必要があります(これは分類用語にも当てはまります)。あなたがしたように。
このコードは関連付けに対して実行されます。
/**
* Entityreference field handler for Drupal 7.
*/
class EntityreferenceHandler extends AbstractHandler {
/**
* {@inheritdoc}
*/
public function expand($values) {
$entity_type = $this->fieldInfo['settings']['target_type'];
$entity_info = entity_get_info($entity_type);
// For users set label to username.
if ($entity_type == 'user') {
$entity_info['entity keys']['label'] = 'name';
}
$return = array();
foreach ($values as $value) {
$target_id = db_select($entity_info['base table'], 't')
->fields('t', array($entity_info['entity keys']['id']))
->condition('t.' . $entity_info['entity keys']['label'], $value)
->execute()->fetchField();
if ($target_id) {
$return[$this->language][] = array('target_id' => $target_id);
}
}
return $return;
}
}
つまり、最初のアイテムはユーザーに関連付けられるよう試みられます。つまり、関連付けが可能なわけではありません(つまり、コンテンツタイプの制限のため)。したがって、関連付けたい名前のエンティティが1つだけあることを確認してください。また、値に「、」、「-」が含まれていないことを確認してください。これらは複数の値に変換され、「-」が存在する場合、「:」の値はkey: value
のペアに変換されます。そのフィールド内で参照できるエンティティ名を正確に言う必要があります(ただし、コードで確認できる限り、名前フィールドの値の前後にスペースがないことを確認してください。上のクエリはエンティティが見つからない場合があります)。また、フィールドが実際のフィールドであるかどうかを確認します(フィールドではないパス 'field'とは異なります)、それを実行でき、field_info_field_map()
コマンドを実行して、フィールドマシン名が見つかったかどうかを確認しますそこでは、キーとして、あなたは大丈夫です。
上記のすべてが満たされ、ユーザーのfield_lines_ref
フィールドで参照できるノードがすでにあり、ノードのタイトルが「行名」である場合、参照を使用してユーザーを作成できるはずです。
Given users:
| name | pass | mail | status | roles | field_lines_ref |
| test | test | [email protected] | 1 | Tester | Line Name |
機能ファイルから、または
$user_obj = (object) array(
'name' => 'test',
'pass' => 'test',
'mail' => '[email protected]',
'status' => '1',
'roles' => 'Tester',
'field_lines_ref' => 'Line Name',
);
$user = $this->userCreate($user_obj);
コンテキストオブジェクトから。
これらの方法で問題が解決しない場合は、独自のコード(ベンダーコードを含む)をデバッグして、どこに問題があるかを確認する必要があります。
この行に沿ってContext.phpファイルに 'Given'関数とその他のサポート関数を作成します...
/**
* @Transform :user
*/
public function castUsernameToUser($user) {
$user_loaded = user_load_by_name ( $user );
if (!$user_loaded) {
throw new \Exception('User was not found: ' . $user);
}
return $user_loaded;
}
/**
* @Transform :field_line
*/
public function castFieldLineToNode($field_line) {
//load your node using the name
return $node;
}
/**
* @Given :user has field line :field_line
*/
public function userHasFieldLine($user, $field_line) {
$user->set ( 'field_lines_ref', $field_line);
$user->save ();
}
次に、ユーザーを作成した後、次のようにステップを機能ファイルに追加します。
And "test" has field line "Line Name"