La funzione WordPress offre risultati diversi all'esterno vs all'interno del test di phpunit

wordpress.stackexchange https://wordpress.stackexchange.com/questions/149048

  •  28-09-2020
  •  | 
  •  

Domanda

Ho lavorato molto duramente per ottenere Phpunit per giocare a WordPress (con l'aiuto di Questo , questo , questo , questo e questo ), e penso di essere abbastanza vicino. Il codice che corro direttamente prima che i miei test assomigliano a questo (fondamentalmente sollevato Verbatim da Questo articolo ):

( PHP_SAPI === 'cli' ) || die( 'Access Denied' );

define( 'PHPUNIT_DB_PREFIX', 'phpunit_' );

global $wp_rewrite, $wpdb;

define( 'WP_MEMORY_LIMIT', '100M' );

require_once( dirname( __FILE__ ) . '/../../../../wp-load.php' );
require_once( ABSPATH . 'wp-admin/includes/admin.php' );

wp_set_current_user( 1 );
.

Sembra funzionare bene, tranne che le funzioni restituiscono cose diverse in base a dove sono nel file. Ad esempio, al di fuori di una classe di test, shortcode_exists restituisce true, mentre all'interno di un caso di test la stessa esattezza dichiarazione shortcode_exists restituisce false. Cosa sto facendo male?

Ecco i contenuti dell'intero file di test:

[Il file è cambiato da quando inizialmente ho pubblicato questo ...]

Modifica: OK, quindi ho seguito il tutorial di J.D. come da vicino possibile. Sembra veramente chiudi. Ora sto ottenendo questo errore:

PHPUnit_Framework_Error_Warning : copy(data/not-gettexted-0.php): failed to open stream: No such file or directory
#0 [internal function]: PHPUnit_Util_ErrorHandler::handleError(2, 'copy(data/not-g...', '/Applications/w...', 41, Array)
#1 /Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/wordpress-dev/trunk/tools/i18n/t/NotGettextedTest.php(41): copy('data/not-gettex...', 'data/not-gettex...')
#2 [internal function]: NotGettextedTest->test_replace()
#3 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestCase.php(988): ReflectionMethod->invokeArgs(Object(NotGettextedTest), Array)
#4 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestCase.php(838): PHPUnit_Framework_TestCase->runTest()
#5 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestResult.php(648): PHPUnit_Framework_TestCase->runBare()
#6 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestCase.php(783): PHPUnit_Framework_TestResult->run(Object(NotGettextedTest))
#7 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestSuite.php(779): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
#8 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestSuite.php(749): PHPUnit_Framework_TestSuite->runTest(Object(NotGettextedTest), Object(PHPUnit_Framework_TestResult))
#9 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/Framework/TestSuite.php(709): PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult), false, Array, Array, false)
#10 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/TextUI/TestRunner.php(350): PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult), false, Array, Array, false)
#11 phar:///Applications/wordpress-3.8.3-0/apps/wordpress/htdocs/wp-content/plugins/hf-accountability/tests/phpunit-lts.phar/phpunit/TextUI/Command.php(176): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), Array)
#12 /private/var/folders/r5/0w5bp7b13pndfymz_pgf_zz00000gn/T/ide-phpunit.php(268): PHPUnit_TextUI_Command->run(Array, true)
#13 /private/var/folders/r5/0w5bp7b13pndfymz_pgf_zz00000gn/T/ide-phpunit.php(506): IDE_Base_PHPUnit_TextUI_Command::main()
#14 {main}
.

Qualche idea come posso risolverlo? Nel frattempo, continuerò a controllare tutti i percorsi dei file che ho definito nei diversi file di configurazione.

Modifica Modifica: L'ultimo errore è stato risolto modificando la configurazione di phpstorm che stavo utilizzando. È necessario impostarlo per "utilizzare il file di configurazione alternativo" e impostare lo scopo del test su "Definito nel file di configurazione".

È stato utile?

Soluzione

Il motivo per cui ciò sta accadendo è in realtà non a causa di nulla nel codice che hai pubblicato, per sé, ma a causa di come hai configurato Phpunit. I callback dei calcoli sono memorizzati in un Global ($shortcode_tags). Quando si carica WP, lo shortcode è registrato e aggiunto a Global. Si chiama shortcode_exists(), controlla $shortcode_tags e restituisce true. Quindi Phpunit inizia a eseguire i test. E cancella la portata variabile globale. Quindi, quando il test è eseguito, $shortcode_tags non esiste più, quindi shortcode_exists() segnala che il tuo shortcode non è registrato. (PhpUnit ripristinerà quindi la portata globale a ciò che è stato prima del test, in modo che i test non influiscano sulle variabili globali. Esecuzione di shortcode_exists() dopo che i test sono finiti reporterà true.)

PhpUnit ha l'impostazione backupGlobals e l'impostazione su false impedirà a PhPUnit di toccare la portata globale. E questo dovrebbe risolvere i tuoi problemi. Tuttavia ....

un modo più eccellente

come autore di Questo tutorial , vorrei raccomandarlo Hai impostato i tuoi test più come mi mostrano lì. Il motivo è che non dovrai scrivere tutto questo bootstrap per ottenere Phpunit per giocare con WordPress. Dovresti invece usare solo il Phpunit Bootstrap di Wordpress, che, ovviamente, è già progettato per giocare a WordPress. : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top