Tests: Restore the database connection earlier when switching test groups.
When plugins don't disable the `backupGlobals` PHPUnit option in their own tests, `$wpdb` is backed up and restored between classes of tests. The serialisation process used for this broke the database connection. This previously wasn't a problem, as it was reconnecting before each test. [38398] introduced some changes that required the connection to be available in `setUpBeforeClass()`, earlier than in was previously reconnecting. This didn't cause warnings in Core, but it did cause warnings for plugins that don't disable the `backupGlobals` option. The database connection now reconnects in `setUpBeforeClass()`. This change also fixes a few Core tests that weren't calling `parent::setUpBeforeClass()` or `parent::tearDown()` correctly. Merges [39626] to the 4.7 branch. Fixes #39327. git-svn-id: https://develop.svn.wordpress.org/branches/4.7@39627 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
7e49d80783
commit
ef084ac427
@ -57,6 +57,13 @@ class WP_UnitTestCase extends PHPUnit_Framework_TestCase {
|
||||
}
|
||||
|
||||
public static function setUpBeforeClass() {
|
||||
global $wpdb;
|
||||
|
||||
$wpdb->suppress_errors = false;
|
||||
$wpdb->show_errors = true;
|
||||
$wpdb->db_connect();
|
||||
ini_set('display_errors', 1 );
|
||||
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
$c = self::get_called_class();
|
||||
@ -98,11 +105,8 @@ class WP_UnitTestCase extends PHPUnit_Framework_TestCase {
|
||||
$this->_backup_hooks();
|
||||
}
|
||||
|
||||
global $wpdb, $wp_rewrite;
|
||||
$wpdb->suppress_errors = false;
|
||||
$wpdb->show_errors = true;
|
||||
$wpdb->db_connect();
|
||||
ini_set('display_errors', 1 );
|
||||
global $wp_rewrite;
|
||||
|
||||
$this->clean_up_global_scope();
|
||||
|
||||
/*
|
||||
|
@ -389,6 +389,11 @@ class wpdb_exposed_methods_for_testing extends wpdb {
|
||||
$this->ready = true;
|
||||
$this->field_types = $wpdb->field_types;
|
||||
$this->charset = $wpdb->charset;
|
||||
|
||||
$this->dbuser = $wpdb->dbuser;
|
||||
$this->dbpassword = $wpdb->dbpassword;
|
||||
$this->dbname = $wpdb->dbname;
|
||||
$this->dbhost = $wpdb->dbhost;
|
||||
}
|
||||
|
||||
public function __call( $name, $arguments ) {
|
||||
|
@ -20,6 +20,7 @@ class Tests_DB extends WP_UnitTestCase {
|
||||
protected static $_wpdb;
|
||||
|
||||
public static function setUpBeforeClass() {
|
||||
parent::setUpBeforeClass();
|
||||
self::$_wpdb = new wpdb_exposed_methods_for_testing();
|
||||
}
|
||||
|
||||
@ -63,6 +64,11 @@ class Tests_DB extends WP_UnitTestCase {
|
||||
$wpdb->close();
|
||||
|
||||
$var = $wpdb->get_var( "SELECT ID FROM $wpdb->users LIMIT 1" );
|
||||
|
||||
// Ensure all database handles have been properly reconnected after this test.
|
||||
$wpdb->db_connect();
|
||||
self::$_wpdb->db_connect();
|
||||
|
||||
$this->assertGreaterThan( 0, $var );
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,8 @@ class Tests_DB_Charset extends WP_UnitTestCase {
|
||||
private static $server_info;
|
||||
|
||||
public static function setUpBeforeClass() {
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
require_once( dirname( dirname( __FILE__ ) ) . '/db.php' );
|
||||
|
||||
self::$_wpdb = new wpdb_exposed_methods_for_testing();
|
||||
|
@ -16,6 +16,7 @@ class Tests_Rewrite_NumericSlugs extends WP_UnitTestCase {
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
parent::tearDown();
|
||||
remove_filter( 'wp_unique_post_slug', array( $this, 'filter_unique_post_slug' ), 10, 6 );
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user