Использование UserManager Drupal для очистки пользователя в тесте Behat - PullRequest
0 голосов
/ 02 июня 2018

Я новичок в Behat и пытаюсь заставить этот тест корректно работать с Behat версии 3.4.3.

001 Scenario: Staff users can create accounts             # features/user.feature:9
  And I register "byron@poetsforever.com" for cleanup # features/user.feature:21
    16384: Interacting directly with the RawDrupalContext::$users property has been deprecated.
    Use RawDrupalContext::getUserManager->getUsers() instead. in /home/vagrant/.composer/vendor/drupal/drupal-extension/src/Drupal/DrupalExtension/Context/RawDrupalContext.php line 152

И вот что я считаю оскорбительным шагом в моем FeatureContext.php:

/**
 * @When I register :email for cleanup
 */


public function registerUserByEmailForCleanup($email) {
    // User must exist or this will throw an error.
    $user = $this->userLoadByEmail($email);
    $this->users[$user->name] = $user;
  }

Любые указатели о том, как преобразовать это, чтобы обновить шаг, чтобы исправить ошибку устаревания, будут высоко цениться, или идеи о том, как заставить Behat игнорировать ошибку и продолжать работать.До сих пор не повезло.Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Я столкнулся с точно такой же проблемой с формой, позволяющей создавать пользователя вручную.Очень непонятно, как Beat обрабатывает сущности, но в конечном итоге использует класс \stdClass, а не класс User, который вы ожидаете:

Вот синтаксис кода и огурца, который мы использовали для достижения:

 /**
   * Create a user and register with Behat for cleanup.
   *
   * Let behat know we manually created a user so it can clean it up in its
   * AfterScenario hook.
   *
   * @TODO: Is there no existing method for this step??
   *
   * @Then I have manually created :username
   */
  public function manuallyCreatedUser($username) {
    $user = user_load_by_name($username);
    if ($user) {
      $user_obj = (object) array(
        'name' => $username,
        'uid' => $user->id(),
        'pass' => '',
        'mail' => $user->getEmail(),
        'role' => implode(",", $user->getRoles()),
      );
      $this->users[$username] = $user_obj;
    }
  }

Здесь происходит несколько вещей:

  • Behat не использует объект User для отслеживания, а вместо этого \stdClass со свойствами.
  • Это просто создает объект, который ожидает
  • Пришел к этому решению, следуя по RawDrupalContext и в конечном итоге Drupal8::userDelete()
0 голосов
/ 03 июня 2018

Кажется, все, что вам нужно сделать, это заменить

$this->users[$user->name] = $user;

на

$this->getUserManager()->addUser($user);

По крайней мере, это то, что мне кажется логичным после прочтения RawDrupalContext.php .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...