使用自定义任务测试安装配置文件


9

对于大型项目,我们使用代码驱动的开发工作流程。我们正在使用自定义安装配置文件来安装和配置项目中使用的contrib和自定义模块。为确保此配置文件的正确性,我们需要像其他任何模块一样对其进行测试。

当前,我们使用一个看起来像这样的SimpleTest测试用例,到目前为止效果很好。

class FooTestCase extends DrupalWebTestCase {

  protected $admin_user = null;

  public function getInfo() {
    return array(
      'name' => 'Foo Profile',
      'description' => 'Ensure that the Foo profile configure the site.',
      'group' => 'Foo',
    );
  }

  public function setUp() {
    $this->profile = 'foo';
    parent::setUp();
  }

  //Test methods ...
}

该站点必须是多语言的,因此为了安装和启用所有必需的语言,我使用添加了一个自定义配置文件任务hook_install_tasks。从浏览器执行时,任务运行正常。但是运行DrupalWebTestCase :: setUp`时不会执行。因此,我们无法测试其效果,以确保它们不会丢失,无论我们将来进行什么样的重构。

由于安装语言需要翻译的加载,因此任务本身使用批处理。

我正在寻找一种既可以执行此特定任务的方法,又可以寻找一种FooTestCase:setUp更普遍的方法来执行我的配置文件中的所有(非交互式任务)。

供参考,以下是该任务的代码

function foo_install_tasks($install_state) {
  return array(on
    'foo_install_import_locales' => array(
      'display_name' => 'Install additional languages',
      'display' => TRUE,
      'type' => 'batch',
      'run' => INSTALL_TASK_RUN_IF_NOT_COMPLETED,
    )
  );
}

function foo_install_import_locales(&$install_state) {
  include_once DRUPAL_ROOT . '/includes/locale.inc';
  include_once DRUPAL_ROOT . '/includes/iso.inc';
  $batch = array();
  $predefined = _locale_get_predefined_list();
  foreach (array('nl', 'de') as $install_locale) {
    if (!isset($predefined[$install_locale])) {
      // Drupal does not know about this language, so we prefill its values with
      // our best guess. The user will be able to edit afterwards.
      locale_add_language($install_locale, $install_locale, $install_locale, LANGUAGE_LTR, '', '', TRUE, FALSE);
    }
    else {
      // A known predefined language, details will be filled in properly.
      locale_add_language($install_locale, NULL, NULL, NULL, '', '', TRUE, FALSE);
    }

    // Collect files to import for this language.
    $batch = array_merge($batch, locale_batch_by_language($install_locale, NULL));

  }
  if (!empty($batch)) {
      // Remember components we cover in this batch set.
      variable_set('foo_install_import_locales', $batch['#components']);
      return $batch;
  }
}

Answers:


6

我通常发现最好将您的安装配置文件尽可能保留下来,并将此类任务放入特定于站点的模块的hook_enable中。同样,在更新实现时,应将所有需要进行的更新放入hook_update_N同一模块的功能中hook_enable

这使测试变得更加简单,并具有将所有设置和更新保存在一个地方的附加好处。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.