stephenharris / wordpress-behat-extension
WordPress extension for Behat 3
Installs: 128
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 4
Forks: 21
Open Issues: 10
Requires
- behat/behat: ~3.0,>=3.0.4
- behat/mink-extension: ~2.0@dev
- myclabs/php-enum: ^1.5
- phpunit/phpunit: >=4.8.0
- sensiolabs/behat-page-object-extension: ^2.0
- symfony/filesystem: ~2.3
- symfony/finder: ~2.3
Requires (Dev)
- behat/behat: ~3.1.0
- behat/mink: ~1.7.1
- behat/mink-extension: ~2.0
- behat/mink-goutte-driver: ~1.1
- behat/mink-selenium2-driver: ~1.3.1
- ifsnop/mysqldump-php: 2.*
- phpunit/phpunit: >=4.8.0
- squizlabs/php_codesniffer: 2.*
- wp-cli/wp-cli: ~0.24
This package is not auto-updated.
Last update: 2024-11-09 20:28:10 UTC
README
This is a Behat 3.0 Extension for WordPress plugin and theme development.
The Extension allows you to use WordPress functions in your context class if you include StephenHarris\WordPressBehatExtension\Context\WordPressContext
(or create and include a child class of it, i.e. make your FeatureContext
).
It also provides other contexts.
Version: 0.4.0 . This project follows SemVer.
History
This repository started off as a fork of:
- https://github.com/JohnBillion/WordPressBehatExtension
- itself a fork of https://github.com/tmf/WordPressExtension
- itself a fork of https://github.com/wdalmut/WordPressExtension
Installation
(For 'quick start' guides, please see the Recipes).
-
Add a composer development requirement for your WordPress theme or plugin:
{ "repositories": [ { "type": "vcs", "url": "https://github.com/stephenharris/WordPressBehatExtension.git" } ], "require-dev" : { "stephenharris/wordpress-behat-extension": "~0.3", "behat/mink-goutte-driver": "~1.1", "behat/mink-selenium2-driver": "~1.3.1", "johnpbloch/wordpress": "~4.6.1" } }
You don't have to install WordPress via composer. But you shall need a path to a WordPress install below. Additionally you don't have to use the Goutte and Selenium2 drivers, but these are the most common.
-
Add the following Behat configuration file below. You will need:
-
The path to your WordPress install (here assumed
vendor/wordpress
, relative to your project's root directory). -
The database, and database username and password of your WordPress install (here assumed
wordress_test
,root
,''
) -
The URL of your WordPress install (In this example we'll be using php's build in server)
-
A temporary directory to store e-mails that are 'sent'
default: suites: default: contexts: - FeatureContext - \StephenHarris\WordPressBehatExtension\Context\WordPressContext - \StephenHarris\WordPressBehatExtension\Context\Plugins\WordPressPluginContext # and any other contexts you need, please see the documentation extensions: StephenHarris\WordPressBehatExtension: path: '%paths.base%/vendor/wordpress' connection: host: 'localhost' db: 'wordpress_test' username: 'root' password: '' mail: directory: '/tmp/mail' Behat\MinkExtension: base_url: 'http://localhost:8000' goutte: ~ selenium2: ~
Note the
StephenHarris\WordPressBehatExtension\Context\WordPressContext
context included. This will cause WordPress to be loaded, and all its functions available in your context classes.. You can also include other contexts.
-
Install the vendors and initialize behat test suites
composer update # You will need to ensure a WordPress install is available, with database credentials that # mach the configuration file above vendor/bin/behat --init
-
Write some Behat features in your project's
features
directory and define any steps. TheWordPressContext
context will make all WordPress functions available in your context classes (but there is a better way).Feature: Manage plugins In order to manage plugins As an admin I need to enable and disable plugins Background: Given I have a vanilla wordpress installation | name | email | username | password | | BDD WordPress | your@email.com | admin | test | And I am logged in as "admin" with password "test" Scenario: Enable the dolly plugin Given there are plugins | plugin | status | | hello.php | enabled | When I go to "/wp-admin/" Then I should see a "#dolly" element Scenario: Disable the dolly plugin Given there are plugins | plugin | status | | hello.php | disabled | When I go to "/wp-admin/" Then I should not see a "#dolly" element
-
Run the tests
In our example, since we using PHP's built-in web sever, this will need to be started so that Behat can access our site.
php -S localhost:8000 -t vendor/wordpress -d disable_functions=mail
```
```bash
vendor/bin/behat
```
Documentation
Please see the Docs.
Aim
The aim of this project is to provide a collection of context classes that allow for easy testing of WordPress' core functionality. Those contexts can then be built upon to test your site/plugin/theme-specific functionality.
License
WordPressBehatExtension is open source and released under MIT license. See LICENSE file for more info.
Health Warning
This is not to be used on a live site. Your database will be cleared of all data.
Currently this extension also over-rides your wp-config.php
but this implementation may change in the future.
The extension installs three mu-plugins
into your install (which it assumes is at {site-path}/wp-content/mu-plugins
). These plug-ins do the following:
wp-mail.php
- over-rideswp_mail()
function to store the e-mails locallywp-install.php
- over-rideswp_install_defaults()
to prevent any default content being created, with the exception of the 'Uncategorised' category.move-admin-bar-to-back.php
- a workaround for #1 which prevent elements from being hidden from Selenium behind the admin menu bar.
Changelog
A changelog can be found at CHANGELOG.md.
How to help
This project needs a lot of love :). You can help by doing any of the following
- Opening an issue to request a context / step definitions
- Submitting a PR to add a context / step definition
- Submiting a PR to add to or improve the documentation
- Opening an issue you have questions or find any bugs
- Just using this extension in your development / testing workflow and providing your feedback