ทดสอบโปรไฟล์การติดตั้งด้วยงานที่กำหนดเอง


9

สำหรับโครงการขนาดใหญ่เราจะใช้รหัสขับเคลื่อนเวิร์กโฟลว์การพัฒนา เรากำลังใช้โปรไฟล์การติดตั้งแบบกำหนดเองเพื่อติดตั้งและกำหนดค่า contrib และโมดูลที่กำหนดเองที่ใช้ในโครงการ การรับรองความถูกต้องของโปรไฟล์นี้เราจำเป็นต้องทดสอบเหมือนโมดูลอื่น ๆ

ปัจจุบันเราใช้กรณีทดสอบ 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ใช้งาน

สิ่งนี้ทำให้การทดสอบง่ายขึ้นและมีประโยชน์เพิ่มเติมในการรักษาการตั้งค่าและการอัปเดตทั้งหมดของคุณไว้ในที่เดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.