it-swarm-ko.tech

사용자 정의 작업으로 설치 프로파일 테스트

대규모 프로젝트의 경우 코드 중심 개발 워크 플로 를 사용합니다. 우리는 사용자 정의 설치 프로파일을 사용하여 프로젝트에 사용되는 제어 및 사용자 정의 모듈을 설치하고 구성합니다. 이 프로파일의 정확성을 보장하기 위해 다른 모듈과 마찬가지로 테스트해야합니다.

현재 우리는 지금까지 잘 작동하는 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;
  }
}
9
Pierre Buyle

일반적으로 설치 프로필을 가능한 한 베어 본으로 남겨두고 이와 같은 작업을 사이트 별 모듈의 hook_enable에 넣는 것이 가장 좋습니다. 마찬가지로 업데이트가 필요한 경우 hook_update_N는 동일한 모듈에서 작동하며 hook_enable 구현.

따라서 테스트가 훨씬 간단 해지며 모든 설정 및 업데이트를 한 곳에 보관할 수 있다는 이점이 있습니다.

6
zroger