Pour un grand projet, nous utilisons un workflow de développement basé sur le code . Nous utilisons un profil d'installation personnalisé pour installer et configurer les modules contrib et custom utilisés sur le projet. Pour garantir l'exactitude de ce profil, nous devons le tester comme tout autre module.
Actuellement, nous utilisons un scénario de test SimpleTest qui ressemble à ceci et qui a bien fonctionné jusqu'à présent.
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 ...
}
Le site doit être multilingue, afin d'installer et d'activer toutes les langues requises, j'ai ajouté une tâche de profil personnalisé en utilisant hook_install_tasks
. La tâche fonctionne correctement lorsqu'elle est exécutée à partir du navigateur. Mais il n'est pas exécuté lorsque DrupalWebTestCase :: setUp` est exécuté. Nous ne pouvons donc pas tester son effet pour nous assurer qu'ils ne seront pas perdus, quelle que soit la refactorisation de notre profil à l'avenir.
Étant donné que l'installation des langues nécessite le chargement des traductions, la tâche elle-même utilise le traitement par lots.
Je cherche à la fois un moyen d'exécuter cette tâche particulière FooTestCase:setUp
et plus généralement d'exécuter toutes les (tâches non interactives) de mon profil.
Pour référence, voici le code de la tâche
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;
}
}