既存のややアクティブなサイトにいくつかのモジュールを構築しています。私の理解では、SimpleTestは新しい一時データベースを作成し、Drupalのコピーを効果的に再インストールします。
ただし、分類やコンテンツタイプなど、既存のサイトの現在のアイテムをいくつか引き継いで、このデータに対してテストしたいと思います。
これをすべてsetup()
で手動で行う必要がありますか?または、SimpleTestがセットアップするテストデータベースに既存のテーブルを複製またはインポートする方法はありますか?
テスト環境はデフォルトで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 {
...
}
私はこれを試したことがないので、テストによってはライブデータベースが変更される可能性があることに注意してください(テストにノードを追加すると、サイトに表示されます)。 。データベースのバックアップを作成し、テストの最後に作成されたすべてのエンティティを削除します。
ライブデータに影響を与えたくない場合は、コンテンツタイプと分類用語を手動で追加する必要があります。