Configuring WPBrowser for Travis CI.
Two sides of the process
In my previous post about Travis and Continuous Integration (CI) I’ve detailed the script required to set up Travis to run all the tests and outlined the requirements it needs to fulfill.
Codeception allows running multiple types of tests with a single command but the requirements of each test type will differ greatly; depending on the project some of those might not be required at all. Running the typical PhpUnit powered unit test will usually only require PHP but moving up to integration tests the WPLoader module will add an accessible MYSQL database to the requirements; further up a module like WPWebDriver dedicated to acceptance testing will rely on a fully working web server like Apache.
Understanding Codeception “distribution” files
When the default Codeception scaffold command runs, e.g. codecept bootstrap
, some files and folders will be created in the project root (see more about this in Codeception installation guide).
The general configuration file codeception.yml
will sit in the project root while the x.suite.yml
configuration files dedicated to each suite will be created in the tests
folder; the location of the files may vary due to a particular project configuration, suites and needs but I’ve described the general behaviour.
In a typical installation of wp-browser the wpcept bootstrap
command will scaffold what I feel is a sensible choice of suites and configurations for a WordPress project; specifically the unit
, integration
, functional
and acceptance
suites and respective configuration files.
The suites configuration files are but, usually, tied to the local machine set up and might not be suited to work in a CI environment like Travis.
To fill this gap Codeception allows for “distribution” versions of each configuration file to be shared across machines to provide a default configuration fallback; to make an example my local tests/wpmodule.suite.yml
reads like this:
class_name: WpmoduleTester
modules:
enabled:
- \Helper\Wpmodule
- WPDb:
dsn: 'mysql:host=docker-mysql;dbname=wpbrowser'
user: 'root'
password: 'password'
dump: 'tests/_data/dump.sql'
populate: true
cleanup: true
reconnect: false
url: 'http://wp-browser.dev'
tablePrefix: 'wpbrowser_'
- WordPress:
depends: WPDb
wpRootFolder: "/Users/Luca/Sites/wordpress"
adminUsername: 'admin'
adminPassword: 'admin'
While this is the wpmodule.suite.dist.yml
file pushed to the wp-browser repository:
class_name: WpmoduleTester
modules:
enabled:
- \Helper\Wpmodule
- WPDb:
dsn: 'mysql:host=localhost;dbname=test'
user: 'root'
password: ''
dump: 'tests/_data/dump.sql'
populate: true
cleanup: true
reconnect: false
url: 'http://wordpress.dev'
tablePrefix: 'wp_'
- WordPress:
depends: WPDb
wpRootFolder: "/tmp/wordpress"
adminUsername: 'admin'
adminPassword: 'admin'
The first file is ignored by Git and is not pushed to the wp-browser repository, Codeception will read, when looking for the wpmodule
suite configuration, the “distribution” version of it, the wpmodule.suite.dist.yml
file.
The settings specified there, like the database credentials or the URL of the WordPress test installation, should match those set in the Travis configuration file.
Next
Before moving to the I’d like this plugin to enable Travis CI on it I will refactor the set up code used to set up the WordPress installation for wp-browser test in a separate package that will contain re-usable code.