Embedded WP version 0.0.1 is out!
WordPress tests without a WordPress installation?
I’ve began working on a new Codeception module extending the possibilities of wp-browser to be able to run functional tests on WordPress plugins and themes removing the need for a running MySQL server and WordPress installation.
The driving need is making modular and atomic development a reality and allowing me to tap into WordPress code base without the overhead of having to set up a server.
This is not a replacement of the WPLoader module part of the wp-browser suite but an additional possibility.
The result of this first effort is on GitHub tagged 0.0.1
.
A code example (aka “the 5' install”)
After requiring the library in composer
composer require lucatume/wp-embedded
I will wait for Composer to finish pulling the required components and will then scaffold the tests structure
codecept bootstrap
Presuming I’m developing a plugin called “My Plugin” with a main file called my-plugin.php
in the plugin root folder I will configure the functional suite to use the EmbeddedWp
module
# Codeception Test Suite Configuration
#
# Suite for functional (integration) tests
# Emulate web requests and make application process them
# Include one of framework modules (Symfony2, Yii2, Laravel5) to use it
class_name: FunctionalTester
modules:
enabled:
- \Helper\Functional
- EmbeddedWp
config:
EmbeddedWp:
mainFile: my-plugin.php
activatePlugins:
- my-plugin.php
build the testing classes
codeception build
and create a first test for the plugin functions
wpcept generate:wpunit functional myPlugin
Given the plugin code
<?php
/**
* Plugin Name: My Plugin
* Plugin URI: http://theAverageDev.com
* Description: My test plugin
* Version: 1.0
* Author: theAverageDev
* Author URI: http://theAverageDev.com
* License: GPL 2.0
*/
require_once 'vendor/autoload.php';
register_activation_hook(__FILE__, function () {
update_option('myplugin_did_activate', 'yes');
});
if (!function_exists('myplugin_slashit')) {
function myplugin_slashit($string)
{
return trailingslashit($string);
}
}
The tests will not differ from the ones used in WPLoader or WordPress automated testing suite.
<?php
class myPluginTest extends \WP_UnitTestCase
{
protected $backupGlobals = false;
public function setUp()
{
// before
parent::setUp();
// your set up methods here
}
public function tearDown()
{
// your tear down methods here
// then
parent::tearDown();
}
public function test_slashit()
{
$this->assertEquals('foo/', myplugin_slashit('foo'));
}
public function test_activation()
{
$this->assertEquals('yes', get_option('myplugin_did_activate'));
}
}