Support for WordPress themes built into wp-browser.
The problem
I’ve mulled over the possibility to add explicit theme support to wp-browser for quite some time but have always snoozed the thought knowing theme testing has been possible for a long time.
I’ve recently been asked 3 times in a week how to do it and that’s probably a signal that’s not as intuitive as I thought.
Local config solution
Where theme testing might get hairy is in the configuration of the WPLoader
module; its inner mechanics, those of the WordPress core automated testing suite, are often lost to many expecting “magic” to happen.
It’s been some time that the WPLoader
module has been accepting a configFile
parameter: that should be the path, or paths, to a list of files that should be loaded before the module runs; it’s essentially the place where custom constants or bootstrap files specific to alternative WordPress installation structures should live.
If the only need is to have a specific theme activated before the tests then that’s as easy as creating a test specific config file:
<?php
global $wp_tests_options;
$wp_tests_options['stylesheet'] = 'child'; // my theme slug
$wp_tests_options['template'] = 'twentysixteen'; // my parent theme slug
and requiring it in the WPLoader
module configuration:
class_name: WploaderTester
modules:
enabled:
- \Helper\Wploadersuite
- WPLoader
config:
WPLoader:
wpRootFolder: "/tmp/wordpress"
dbName: "wploader"
dbHost: "localhost"
dbUser: root
dbPassword: ''
wpDebug: true
dbCharset: "utf8"
dbCollate: ""
tablePrefix: "wp_"
domain: "wordpress.dev"
adminEmail: "admin@wordpress.dev"
title: "Test"
phpBinary: "php"
language: ""
configFile: "tests/tests-config.php"
plugins: []
activatePlugins: []
booststrapActions: []
see this example for a pods based theme.
Built-in solution
The latest version of wp-browser allows skipping that step completely and adding a parameter in the module configuration directly:
class_name: WploaderTester
modules:
enabled:
- \Helper\Wploadersuite
- WPLoader
config:
WPLoader:
wpRootFolder: "/tmp/wordpress"
dbName: "wploader"
dbHost: "localhost"
dbUser: root
dbPassword: ''
wpDebug: true
dbCharset: "utf8"
dbCollate: ""
tablePrefix: "wp_"
domain: "wordpress.dev"
adminEmail: "admin@wordpress.dev"
title: "Test"
phpBinary: "php"
language: ""
theme: ['parent', 'child']
plugins: []
activatePlugins: []
booststrapActions: []
The theme
parameter can be a string to activate an independent theme or an array, like [ 'parent', 'child' ]
to activate a child theme.
On GitHub
Version 1.18
or wp-browser is already published on GitHub, run composer update
to fetch it.