Рейтинг:1

Как я могу загрузить миграцию в KernelTest?

флаг in

Я пытаюсь протестировать миграцию с помощью KernelTest, но сталкиваюсь с проблемой, когда пытаюсь загрузить подключаемый модуль миграции.

Моя миграция определена в мой_модуль/миграции/my_migration.yml. В моем KernelTest я перечислил мой_модуль и мигрировать в $модули статическое свойство.

В пользовательской форме я использую следующее для загрузки плагина миграции:

/** @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface $plugin_manager */
$plugin_manager = \Drupal::service('plugin.manager.migration');
$миграция = $plugin_manager
  ->createInstance('MY_MIGRATION');
// Далее создаем MigrateExecutable и т.д...

Однако, когда я использую этот же код в своем KernelTest, $миграция является всегда ЛОЖНЫЙ. Я чувствую, что это связано с тем, что моя миграция не загружается (?), Когда я включаю свой модуль в тесте, но я не уверен, что с этим делать. Что мне здесь не хватает? Как я могу загрузить свою миграцию в тест?

sonfd avatar
флаг in
Должно быть, в моем тестовом классе произошло что-то странное, из-за чего это не удалось.
Рейтинг:0
флаг in

Модуль миграции предоставляет базовый тестовый класс ядра, Drupal\Tests\migrate\Kernel\MigrateTestBase, который имеет получить миграцию () запеченный метод.

Например, это работает, и тест проходит:

<?php

пространство имен Drupal\my_module\tests\Kernel;

используйте Drupal\migrate\Plugin\MigrationInterface;
используйте Drupal\Tests\migrate\Kernel\MigrateTestBase;

класс MyMigrationTest расширяет MigrateTestBase {

  защищенные статические $modules = [
    'мой_модуль',
    'мигрировать',
    // и т.д...
  ];
  
  публичная функция testMigration(): void {
    $migration = $this->getMigration('MY_MIGRATION');

    $this->assertInstanceOf(MigrationInterface::class, $migration);
  }

}

Однако нет необходимости расширять МигрироватьTestBase, это также работает и тест проходит:

<?php

пространство имен Drupal\my_module\tests\Kernel;

используйте Drupal\KernelTests\KernelTestBase;
используйте Drupal\migrate\Plugin\MigrationInterface;

класс MyMigrationTest расширяет KernelTestBase {

  защищенные статические $modules = [
    'мой_модуль',
    'мигрировать',
    // и т.д...
  ];
  
  публичная функция testMigration(): void {
    /** @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface 
    $plugin_manager */
    $plugin_manager = \Drupal::service('plugin.manager.migration');
    $миграция = $plugin_manager
      ->createInstance('MY_MIGRATION');

    $this->assertInstanceOf(MigrationInterface::class, $migration);
  }

}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.