कस्टम कार्यों के साथ इंस्टॉलेशन प्रोफाइल का परीक्षण करना


9

एक बड़ी परियोजना के लिए, हम एक कोड संचालित विकास वर्कफ़्लो का उपयोग कर रहे हैं । हम परियोजना पर प्रयुक्त कंट्रीब और कस्टम मॉड्यूल को स्थापित और कॉन्फ़िगर करने के लिए एक कस्टम इंस्टॉलेशन प्रोफ़ाइल का उपयोग कर रहे हैं। इस प्रोफ़ाइल की सुनिश्चितता, हमें किसी भी अन्य मॉड्यूल की तरह इसका परीक्षण करने की आवश्यकता है।

वर्तमान में, हम एक SimpleTest परीक्षण मामले का उपयोग करते हैं जो इस तरह दिखता है जो अब तक अच्छा काम करता है।

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 ...
}

साइट को बहुभाषी होना चाहिए, इसलिए सभी आवश्यक भाषा को स्थापित करने और सक्षम करने के लिए, मैंने एक कस्टम प्रोफ़ाइल कार्य का उपयोग करके जोड़ा hook_install_tasks। ब्राउज़र से निष्पादित होने पर कार्य ठीक काम करता है। लेकिन यह DrupalWebTestCase :: setUp` चलाए जाने पर निष्पादित नहीं किया जाता है। इसलिए हम यह सुनिश्चित करने के लिए इसके प्रभाव का परीक्षण करने में असमर्थ हैं कि भविष्य में हमारी प्रोफ़ाइल के माध्यम से जो भी रिफ्लेक्टरिंग होगी वह खो न जाए।

चूंकि भाषाओं की स्थापना के लिए अनुवाद लोड करने की आवश्यकता होती है, इसलिए कार्य स्वयं बैच प्रोसेसिंग का उपयोग करता है।

मैं इस विशेष कार्य को अंजाम FooTestCase:setUpदेने के लिए और आम तौर पर मेरे प्रोफ़ाइल में निष्पादित सभी (गैर संवादात्मक कार्य) करने के लिए दोनों का रास्ता खोज रहा हूं ।

संदर्भ के लिए, यहां कार्य के लिए कोड है

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;
  }
}

जवाबों:


6

मुझे आमतौर पर अपनी स्थापना प्रोफ़ाइल को नंगे हड्डियों के रूप में छोड़ना सबसे अच्छा लगता है, और इस तरह के कार्यों को एक साइट विशिष्ट मॉड्यूल के हुक_ में शामिल किया जाता है। इसी तरह, किसी भी अपडेट को करने की आवश्यकता होती है hook_update_Nजिसे hook_enableकार्यान्वयन को अपडेट करते समय, एक ही मॉड्यूल में फ़ंक्शन में रखा जाना चाहिए ।

यह परीक्षण करने के लिए बहुत सरल बनाता है और आपके सभी सेटअप और अपडेट को एक स्थान पर रखने का अतिरिक्त लाभ है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.