Kurulum profilini özel görevlerle test etme


9

Büyük bir proje için, kod odaklı bir geliştirme iş akışı kullanıyoruz . Projede kullanılan katkı ve özel modülleri kurmak ve yapılandırmak için özel bir kurulum profili kullanıyoruz. Bu profilin doğruluğunu sağlamak için, diğer herhangi bir modül gibi test etmemiz gerekir.

Şu anda, şimdiye kadar iyi çalışan şuna benzeyen bir SimpleTest test çantası kullanıyoruz.

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

Site çok dilli olmalıdır, bu yüzden gerekli tüm dili yüklemek ve etkinleştirmek için kullanarak özel bir profil görevi ekledim hook_install_tasks. Tarayıcıdan yürütüldüğünde görev düzgün çalışıyor. Ancak DrupalWebTestCase :: setUp` çalıştırıldığında yürütülmez. Bu nedenle, profilimizin yeniden düzenlenmesi gelecekte ne olursa olsun kaybolmamasını sağlamak için etkisini test edemiyoruz.

Dillerin yüklenmesi çevirilerin yüklenmesini gerektirdiğinden, görevin kendisi toplu işlemeyi kullanır.

Bu özel görevin yürütülmesi için hem de FooTestCase:setUpdaha genel olarak tüm (etkileşimli olmayan görevler) profilim yürütmek için bir yol arıyorum .

Başvuru için, işin kodu

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

Yanıtlar:


6

Genellikle kurulum profilinizi mümkün olduğunca çıplak kemikler olarak bırakmayı ve siteye özgü bir modülün hook_enable'ına bunun gibi görevleri koymayı en iyi şekilde bulurum. Benzer şekilde, yapılması gereken tüm hook_update_Ngüncellemeler, hook_enableuygulama güncellenirken aynı modülde işlevlere sokulmalıdır .

Bu, test etmeyi çok daha basit hale getirir ve tüm kurulum ve güncellemelerinizi tek bir yerde tutma avantajına sahiptir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.