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:setUp
dan 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;
}
}