WordPress testing tools
The sole ability to mocking functions is a great help on testing WordPress code.
All WordPress functions can be mocked and tested using the techniques described in the PHP Functions section, they are PHP functions, after all.
However, to test WordPress code in isolation, without a bunch of bootstrap code for every test, a more fine grained control of plugin API functions is required.
This is exactly what Brain Monkey offers.
Defined functions
Following functions are defined by Brain Monkey when it is loaded for tests:
Hook-related functions:
add_action()
remove_action()
do_action()
do_action_ref_array()
do_action_deprecated()
(since 2.4)did_action()
doing_action()
has_action()
add_filter()
remove_filter()
apply_filters()
apply_filters_ref_array()
apply_filters_deprecated()
(since 2.4)doing_filter()
has_filter()
current_filter()
Generic functions:
__return_true()
__return_false()
__return_null()
__return_zero()
__return_empty_array()
__return_empty_string()
trailingslashit()
untrailingslashit()
user_trailingslashit()
(since 2.6)absint()
(since 2.3)wp_json_encode()
(since 2.6)is_wp_error()
(since 2.3)wp_validate_boolean()
(since 2.7)wp_slash()
(since 2.7)
Translation function:
Since Brain Monkey 2.3, stubs for the standard WordPress translations functions are available via Functions\stubEscapeFunctions()
. See: Pre-defined stubs for translation functions
Escaping functions: Since Brain Monkey 2.3, stubs for the standard WordPress escaping functions are available via Functions\stubTranslationFunctions()
. See: Pre-defined stubs for escaping functions
If your code uses any of these functions, and very likely it does, you don't need to define (or mock) them to avoid fatal errors during tests.
Note that the returning value of those functions (most of the times) will work out of the box as you might expect.
For example, if your code contains:
the value of $did
will be correctly 1
(did_action()
in WordPress returns the number an action was done).
Or if your code contains:
the value of $title
will be 'My Title'
, without the need of any intervention.
This works as long as there's no code that actually adds filters to "the_title"
hook, so we expect that the title stay unchanged. And that's what happen.
If in the code under test there's something that adds filters (i.e. calls add_filter
), the Brain Monkey version of apply_filters
will still return the value unchanged, but will allow to test that apply_filters
has been called, how many times, with which callbacks and arguments are used.
More generally, with regards to the WP hook API, Brain Monkey allows to:
test if an action or a filter has been added, how many times that happen and with which arguments
test if an action or a filter has been fired, how many times that happen and with which arguments
perform some callback when an action is fired, being able to access passed arguments
perform some callback when an filter is applied, being able to access passed arguments and to return specific values
And it does that using its straightforward and human-readable syntax.
Last updated