Menguji profil pemasangan dengan tugas khusus


9

Untuk proyek besar, kami menggunakan alur kerja pengembangan yang digerakkan oleh kode . Kami menggunakan profil instalasi khusus untuk menginstal dan mengkonfigurasi modul contrib dan custom yang digunakan pada proyek. Untuk memastikan kebenaran profil ini, kita perlu mengujinya seperti modul lainnya.

Saat ini, kami menggunakan test case SimpleTest yang terlihat seperti ini yang bekerja dengan baik sejauh ini.

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

Situs harus multibahasa, jadi untuk menginstal dan mengaktifkan semua bahasa yang diperlukan, saya menambahkan tugas profil khusus menggunakan hook_install_tasks. Tugas ini berfungsi dengan baik saat dijalankan dari browser. Tetapi itu tidak dieksekusi ketika DrupalWebTestCase :: setUp` dijalankan. Jadi kami tidak dapat menguji efeknya untuk memastikan mereka tidak hilang, apa pun yang akan dilakukan refactoring profil kami di masa depan.

Karena instalasi bahasa memerlukan pemuatan terjemahan, tugas itu sendiri menggunakan pemrosesan batch.

Saya sedang mencari cara untuk menjalankan tugas khusus ini FooTestCase:setUpdan lebih umum untuk menjalankan semua (tugas non-interaktif) di profil saya.

Untuk referensi, berikut adalah kode untuk tugas tersebut

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

Jawaban:


6

Saya biasanya menemukan yang terbaik untuk meninggalkan profil instalasi Anda sebagai tulang telanjang mungkin, dan menempatkan tugas-tugas seperti ini ke hook_enable dari modul khusus situs. Demikian pula, setiap pembaruan yang perlu dibuat harus dimasukkan ke dalam hook_update_Nfungsi - fungsi dalam modul yang sama, sambil memperbarui hook_enableimplementasinya.

Ini membuatnya lebih mudah untuk diuji dan memiliki manfaat tambahan menjaga semua pengaturan dan pembaruan Anda di satu tempat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.