PHPUnit test plugin activation

Estou tentando testar se meu plugin se ativa corretamente com o PHPUnit. Utilizei a estrutura do gabarito gerada neste site e adicionei este teste:

class PluginTest extends WP_UnitTestCase { function test_plugin_activation() { include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $result = activate_plugin( WP_CONTENT_DIR . '/plugins/example-plugin/example-plugin.php', '', TRUE, FALSE ); $this->assertNotWPError( $result ); } } 

Mas eu recebo esse erro:

 1) PluginTest::test_plugin_activation Plugin file does not exist. Failed asserting that WP_Error Object (...) is not an instance of class "WP_Error". 

Verifiquei manualmente e posso ativar e desativar o plugin através do painel de administração do WordPress.

Solutions Collecting From Web of "PHPUnit test plugin activation"

O teste de ativação / instalação e desinstalação do plugin com o pacote de teste principal do WordPress pode ser feito mais facilmente e corretamente com esses utilitários adicionais . O foco principal é testar a desinstalação, mas eles também testam a ativação / instalação. Este é o exemplo de caso de teste a partir daí, e mostra como você testaria a instalação e desinstalação:

 < ?php /** * Test uninstallation. */ /** * Plugin uninstall test case. * * Be sure to add "@group uninstall", so that the test will run only as part of the * uninstall group. * * @group uninstall */ class My_Plugin_Uninstall_Test extends WP_Plugin_Uninstall_UnitTestCase { // // Protected properties. // /** * The full path to the main plugin file. * * @type string $plugin_file */ protected $plugin_file; // // Public methods. // /** * Set up for the tests. */ public function setUp() { // You must set the path to your plugin here. $this->plugin_file = dirname( dirname( __FILE__ ) ) . '/myplugin.php'; // Don't forget to call the parent's setUp(), or the plugin won't get installed. parent::setUp(); } /** * Test installation and uninstallation. */ public function test_uninstall() { /* * First test that the plugin installed itself properly. */ // Check that a database table was added. $this->assertTableExists( $wpdb->prefix . 'myplugin_table' ); // Check that an option was added to the database. $this->assertEquals( 'default', get_option( 'myplugin_option' ) ); /* * Now, test that it uninstalls itself properly. */ // You must call this to perform uninstallation. $this->uninstall(); // Check that the table was deleted. $this->assertTableNotExists( $wpdb->prefix . 'myplugin_table' ); // Check that all options with a prefix was deleted. $this->assertNoOptionsWithPrefix( 'myplugin' ); // Same for usermeta and comment meta. $this->assertNoUserMetaWithPrefix( 'myplugin' ); $this->assertNoCommentMetaWithPrefix( 'myplugin' ); } } 

Eu acho que isso é provavelmente o que você está tentando alcançar.


Por enquanto, seus testes estão falhando como estão, não tenho certeza. Para destruí-lo, você precisa ver de onde é que esse erro vem em activate_plugin() ; Que parte do cheque para o arquivo de plugin está falhando? Ferramentas como xdebug são inestimáveis ​​para esse tipo de coisa. Se você não tiver o xdebug instalado para a compilation PHP que você está usando (você provavelmente deveria obtê-lo), você terá que debug-lo manualmente, observando o código-fonte de activate_plugin() et al. e ver onde esse erro é originário.