Para un proyecto grande, estamos utilizando un flujo de trabajo de desarrollo basado en código . Estamos utilizando un perfil de instalación personalizado para instalar y configurar los módulos contrib y personalizados utilizados en el proyecto. Para garantizar la corrección de este perfil, debemos probarlo como cualquier otro módulo.
Actualmente, utilizamos un caso de prueba SimpleTest que se parece a esto y que funcionó bien hasta ahora.
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 ...
}
El sitio debe ser multilingüe, por lo que para instalar y habilitar todo el idioma requerido, agregué una tarea de perfil personalizada usando hook_install_tasks
. La tarea funciona bien cuando se ejecuta desde el navegador. Pero no se ejecuta cuando se ejecuta DrupalWebTestCase :: setUp`. Por lo tanto, no podemos probar su efecto para garantizar que no se pierdan, independientemente de la refactorización de nuestro perfil en el futuro.
Dado que la instalación de idiomas requiere la carga de traducciones, la tarea en sí misma utiliza el procesamiento por lotes.
Estoy buscando una manera de ejecutar esta tarea en particular FooTestCase:setUp
y, en general, tener todas las (tareas no interactivas) en mi perfil ejecutadas.
Como referencia, aquí está el código para la tarea
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;
}
}