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


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;
  }
}

답변:


6

일반적으로 설치 프로필을 가능한 한 베어 본으로 남겨두고 이와 같은 작업을 사이트 별 모듈의 hook_enable에 넣는 것이 가장 좋습니다. 마찬가지로, 업데이트를 수행해야하는 모든 업데이트 hook_update_Nhook_enable구현 을 업데이트하는 동안 동일한 모듈의 기능에 포함 되어야합니다 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.