Description
Description
When trying to set up a test environment for a WordPress plugin using Brain\Monkey, I'm encountering a ReflectionException
stating that the get_option() function does not exist. This occurs during the bootstrap process, specifically when Patchwork tries to patch WordPress functions.
Environment
- PHP Version: [Your PHP Version]
- Brain\Monkey Version: 2.6.2
- PHPUnit Version: 9.6.22
- Operating System: Windows
- WordPress Plugin Type: WooCommerce Integration
Dependencies (from composer.json)
{
"require-dev": {
"phpunit/phpunit": "^9.0",
"brain/monkey": "^2.6",
"mockery/mockery": "^1.5"
}
}
Bootstrap :
<?php
// First require Patchwork
require_once dirname(__DIR__) . '/vendor/antecedent/patchwork/Patchwork.php';
// Then require the Composer autoloader
require_once dirname(__DIR__) . '/vendor/autoload.php';
// Now require Brain Monkey
require_once dirname(__DIR__) . '/vendor/brain/monkey/inc/api.php';
// Define WordPress constants
if (!defined('ABSPATH')) {
define('ABSPATH', __DIR__ . '/wordpress/');
}
if (!defined('WP_DEBUG')) {
define('WP_DEBUG', true);
}
if (!defined('DAY_IN_SECONDS')) {
define('DAY_IN_SECONDS', 86400);
}
// Initialize Brain Monkey
Brain\Monkey\setUp();
// Mock WordPress functions
Brain\Monkey\Functions\stubs([
'get_option' => [],
'update_option' => true,
'wp_verify_nonce' => true,
'current_user_can' => true,
'plugin_basename' => 'plugin/plugin.php',
'plugin_dir_path' => __DIR__ . '/',
'plugins_url' => 'http://example.com/wp-content/plugins/',
'__' => function($text) { return $text; },
'esc_html' => function($text) { return $text; },
'esc_attr' => function($text) { return $text; },
'esc_url' => function($text) { return $text; },
'wp_kses_post' => function($text) { return $text; },
'sanitize_text_field' => function($text) { return $text; },
'add_action' => true,
'add_filter' => true,
'do_action' => true,
'apply_filters' => function($hook, $value) { return $value; },
]);
// Clean up Brain\Monkey on shutdown
register_shutdown_function(function() {
Brain\Monkey\tearDown();
});
Error Log
Error in bootstrap script: ReflectionException:
Function get_option() does not exist
#0 C:\xampp\htdocs\wordpress\wp-content\plugins\zarzadzanie-dzielnicami\vendor\antecedent\patchwork\src\CallRerouting.php(416): ReflectionFunction->__construct('get_option')
#1 C:\xampp\htdocs\wordpress\wp-content\plugins\zarzadzanie-dzielnicami\vendor\antecedent\patchwork\Patchwork.php(131): Patchwork\CallRerouting\createStubsForInternals()
#2 C:\xampp\htdocs\wordpress\wp-content\plugins\zarzadzanie-dzielnicami\tests\bootstrap.php(4): require_once('C:\\xampp\\htdocs...')`
What I've Tried
Loading Patchwork before any function definitions
Using different namespace approaches (global namespace, namespaced code)
Manually defining WordPress functions before Brain\Monkey setup
Using Brain\Monkey's Functions\stubs() instead of manual function definitions
Following the solution from this StackOverflow post
Expected Behavior
The test bootstrap should successfully mock WordPress functions using Brain\Monkey without throwing the ReflectionException.
Question
Is there a specific order or approach required to properly set up Brain\Monkey with Patchwork for WordPress function mocking? The documentation suggests this should work, but I'm encountering this error consistently.