Per un grande progetto, stiamo usando un flusso di lavoro di sviluppo basato su codice . Stiamo utilizzando un profilo di installazione personalizzato per installare e configurare i moduli contrib e personalizzati utilizzati nel progetto. Per garantire la correttezza di questo profilo, dobbiamo testarlo come qualsiasi altro modulo.
Attualmente, utilizziamo un caso di test SimpleTest che assomiglia a questo, che finora ha funzionato bene.
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 ...
}
Il sito deve essere multilingue, quindi per installare e abilitare tutta la lingua richiesta, ho aggiunto un'attività del profilo personalizzato usando hook_install_tasks
. L'attività funziona correttamente quando eseguita dal browser. Ma non viene eseguito quando viene eseguito DrupalWebTestCase :: setUp`. Quindi non siamo in grado di testarne l'effetto per assicurarci che non vengano persi qualunque sia il refactoring che il nostro profilo subirà in futuro.
Poiché l'installazione delle lingue richiede il caricamento delle traduzioni, l'attività stessa utilizza l'elaborazione in batch.
Sto cercando sia un modo per eseguire questo particolare compito FooTestCase:setUp
sia, più in generale, per avere tutti (compiti non interattivi) eseguiti nel mio profilo.
Per riferimento, ecco il codice per l'attività
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;
}
}