Die WordPress-Funktion liefert außerhalb und innerhalb des PHPUnit-Tests unterschiedliche Ergebnisse

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

  •  28-09-2020
  •  | 
  •  

Frage

Ich habe sehr hart daran gearbeitet, dass PHPUnit gut mit WordPress funktioniert (mit Hilfe von Das, Das, Das, Das, Und Das), und ich denke, ich bin ziemlich nahe gekommen.Der Code, den ich direkt vor meinen Tests ausführe, sieht so aus (im Grunde genommen wörtlich übernommen von Dieser Artikel):

( 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 );

Scheint gut zu funktionieren, außer dass Funktionen unterschiedliche Dinge zurückgeben, je nachdem, wo sie sich in der Datei befinden.Beispielsweise außerhalb einer Testklasse, shortcode_exists gibt true zurück, während innerhalb eines Testfalls genau das Gleiche gilt shortcode_exists Anweisung gibt false zurück.Was mache ich falsch?

Hier ist der Inhalt der gesamten Testdatei:

[Die Datei hat sich geändert, seit ich dies ursprünglich gepostet habe...]

BEARBEITEN:Ok, also habe ich J.D.s Tutorial so genau wie möglich befolgt.Es fühlt Wirklich schließen.Ich erhalte jetzt diesen Fehler:

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}

Irgendeine Idee, wie ich das beheben kann?In der Zwischenzeit werde ich weiterhin alle Dateipfade überprüfen, die ich in den verschiedenen Konfigurationsdateien definiert habe.

BEARBEITEN BEARBEITEN:Der letzte Fehler wurde durch Ändern der von mir verwendeten PhpStorm-Konfiguration behoben.Sie müssen sowohl „Alternative Konfigurationsdatei verwenden“ als auch den Testumfang auf „In der Konfigurationsdatei definiert“ festlegen.

War es hilfreich?

Lösung

Der Grund dafür liegt eigentlich nicht in dem Code, den Sie gepostet haben, sondern in der Art und Weise, wie Sie PHPUnit konfiguriert haben.Die Shortcode-Rückrufe werden in einem globalen ($shortcode_tags).Wenn Sie WP laden, wird der Shortcode registriert und zum globalen hinzugefügt.Du rufst an shortcode_exists(), es prüft $shortcode_tags, und kehrt zurück true.Dann beginnt PHPUnit mit der Ausführung Ihrer Tests.Und es löscht den globalen Variablenbereich.Wenn Ihr Test ausgeführt wird, $shortcode_tags existiert nicht mehr, also shortcode_exists() meldet, dass Ihr Shortcode nicht registriert ist.(PHPUnit stellt dann den globalen Geltungsbereich auf den Stand vor dem Test wieder her, sodass sich die Tests nicht auf die globalen Variablen auswirken.Läuft shortcode_exists() Nachdem die Tests abgeschlossen sind, werde ich berichten true.)

PHPUnit hat das backupGlobals Einstellung und Einstellung auf false verhindert, dass PHPUnit den globalen Bereich berührt.Und das sollte Ihre Probleme beheben.Jedoch....

Ein besserer Weg

Als Autor von dieses Tutorial, Ich möchte Ihnen empfehlen, Ihre Tests eher so einzurichten, wie ich es dort zeige.Der Grund dafür ist, dass Sie nicht den ganzen Bootstrap schreiben müssen, damit PHPUnit mit WordPress funktioniert.Stattdessen sollten Sie einfach den PHPUnit-Bootstrap von WordPress verwenden, der offensichtlich bereits für die reibungslose Zusammenarbeit mit WordPress entwickelt wurde.:-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top