Test del profilo di installazione con attività personalizzate


9

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:setUpsia, 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;
  }
}

Risposte:


6

In genere trovo che sia meglio lasciare il tuo profilo di installazione il più semplice possibile e inserire attività come questa in hook_enable di un modulo specifico del sito. Allo stesso modo, tutti gli aggiornamenti che devono essere effettuati dovrebbero essere messi in hook_update_Nfunzione nello stesso modulo, durante l'aggiornamento hook_enabledell'implementazione.

Questo rende molto più semplice il test e ha l'ulteriore vantaggio di mantenere tutte le impostazioni e gli aggiornamenti in un unico posto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.