web-dev-qa-db-ja.com

現在のデータベースに対するテストを書くことは可能ですか?

既存のややアクティブなサイトにいくつかのモジュールを構築しています。私の理解では、SimpleTestは新しい一時データベースを作成し、Drupalのコピーを効果的に再インストールします。

ただし、分類やコンテンツタイプなど、既存のサイトの現在のアイテムをいくつか引き継いで、このデータに対してテストしたいと思います。

これをすべてsetup()で手動で行う必要がありますか?または、SimpleTestがセットアップするテストデータベースに既存のテーブルを複製またはインポートする方法はありますか?

4
Rick

テスト環境はデフォルトでWebサイトから完全に分離されているため、モジュールテストは環境の影響を受けません。ただし、データベースを切り替えることができる場合があります。ライブデータベースでのテストに関するこの記事があります http://www.codesidekick.com/blog/break-out-simpletest-sandbox 。基本的に、DrupalWebTestCaseを拡張するクラスで、セットアップとティアダウン中にいくつかの変数をオーバーライドします。

/**
 * @file
 * Common testing class for this Drupal site.
 */
abstract class SiteTesting extends DrupalWebTestCase {

  /**
   * Overrides default set up handler to prevent database sand-boxing.
   */
  protected function setUp() {
    // Use the test mail class instead of the default mail handler class.
    variable_set('mail_system', array('default-system' => 'TestingMailSystem'));
    $this->originalFileDirectory = variable_get('file_public_path', conf_path() . '/files');
    $this->public_files_directory = $this->originalFileDirectory;
    $this->private_files_directory = variable_get('file_private_path');
    $this->temp_files_directory = file_directory_temp();

    drupal_set_time_limit($this->timeLimit);
    $this->setup = TRUE;
  }

  /**
   * Overrides default tear down handler to prevent database sandbox deletion.
   */
  protected function tearDown() {
    // In case a fatal error occurred that was not in the test process read the
    // log to pick up any fatal errors.
    simpletest_log_read($this->testId, $this->databasePrefix, get_class($this), TRUE);

    $emailCount = count(variable_get('drupal_test_email_collector', array()));
    if ($emailCount) {
      $message = format_plural($emailCount, '1 e-mail was sent during this test.', '@count e-mails were sent during this test.');
      $this->pass($message, t('E-mail'));
    }

    // Close the CURL handler.
    $this->curlClose();
  }
}

次に、テストで、新しく作成したクラスを必ず拡張してください。

class SiteTestingHomePageTest extends SiteTesting {
  ...
}

私はこれを試したことがないので、テストによってはライブデータベースが変更される可能性があることに注意してください(テストにノードを追加すると、サイトに表示されます)。 。データベースのバックアップを作成し、テストの最後に作成されたすべてのエンティティを削除します。

ライブデータに影響を与えたくない場合は、コンテンツタイプと分類用語を手動で追加する必要があります。

4
Neograph734