X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Ftests%2FREADME.md;h=0ea2efc9ba4e36186c6a8594aee927d7845896e6;hb=refs%2Fheads%2Fd864;hp=5dd6cc63944e638019d925a92974b293254f3afd;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/tests/README.md b/web/core/tests/README.md index 5dd6cc639..0ea2efc9b 100644 --- a/web/core/tests/README.md +++ b/web/core/tests/README.md @@ -2,22 +2,22 @@ ## Functional tests -* Start PhantomJS: - ``` - phantomjs --ssl-protocol=any --ignore-ssl-errors=true ./vendor/jcalderonzumba/gastonjs/src/Client/main.js 8510 1024 768 2>&1 >> /dev/null & - ``` * Run the functional tests: ``` export SIMPLETEST_DB='mysql://root@localhost/dev_d8' export SIMPLETEST_BASE_URL='http://d8.dev' ./vendor/bin/phpunit -c core --testsuite functional - ./vendor/bin/phpunit -c core --testsuite functional-javascript ``` Note: functional tests have to be invoked with a user in the same group as the web server user. You can either configure Apache (or nginx) to run as your own system user or run tests as a privileged user instead. +Invoking tests with a user that is in the same group as the web server will +require you to ensure Drupal keeps gid stickybits when creating new directories. + +`$settings['file_chmod_directory'] = 02775;` + To develop locally, a straightforward - but also less secure - approach is to run tests as your own system user. To achieve that, change the default Apache user to run as your system user. Typically, you'd need to modify @@ -37,6 +37,67 @@ User Group ``` +## Functional javascript tests + +Javascript tests use the Selenium2Driver which allows you to control a +big range of browsers. By default Drupal uses chromedriver to run tests. +For help installing and starting selenium, see http://mink.behat.org/en/latest/drivers/selenium2.html + +* Make sure you have a recent version of chrome installed + +* Install selenium-server-standalone and chromedriver + +Example for Mac: + +``` +brew install selenium-server-standalone +brew install chromedriver +``` + +* Before running tests make sure that selenium-server is running +``` +selenium-server -port 4444 +``` + +* Set the correct driver args and run the tests: +``` +export MINK_DRIVER_ARGS_WEBDRIVER='["chrome", null, "http://localhost:4444/wd/hub"]' +./vendor/bin/phpunit -c core --testsuite functional-javascript +``` + +* It is possible to use alternate browsers if the required dependencies are +installed. For example to use Firefox: + +``` +export MINK_DRIVER_ARGS_WEBDRIVER='["firefox", null, "http://localhost:4444/wd/hub"]' +./vendor/bin/phpunit -c core --testsuite functional-javascript +``` + +* To force all BrowserTestBase (including legacy JavascriptTestBase) tests to use +webdriver: + +``` +export MINK_DRIVER_CLASS='Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver' +./vendor/bin/phpunit -c core --testsuite functional-javascript +``` + +## Running legacy javascript tests + +Older javascript test may use the PhantomJSDriver. To run these tests you will +have to install and start PhantomJS. + +* Start PhantomJS: + ``` + phantomjs --ssl-protocol=any --ignore-ssl-errors=true ./vendor/jcalderonzumba/gastonjs/src/Client/main.js 8510 1024 768 2>&1 >> /dev/null & + ``` + +* Then you can run the test: +``` +./vendor/bin/phpunit -c core --testsuite functional-javascript +``` + +## Running tests with a different user + If the default user is e.g. `www-data`, the above functional tests will have to be invoked with sudo instead: @@ -46,3 +107,34 @@ export SIMPLETEST_BASE_URL='http://d8.dev' sudo -u www-data -E ./vendor/bin/phpunit -c core --testsuite functional sudo -u www-data -E ./vendor/bin/phpunit -c core --testsuite functional-javascript ``` + +## Nightwatch tests + +- Ensure your vendor directory is populated (e.g. by running `composer install`) +- If you're running PHP 7.0 or greater you will need to upgrade PHPUnit with `composer run-script drupal-phpunit-upgrade` +- Install [Node.js](https://nodejs.org/en/download/) and [yarn](https://yarnpkg.com/en/docs/install). The versions required are specificed inside core/package.json in the `engines` field +- Install [Google Chrome](https://www.google.com/chrome/browser/desktop/index.html) +- Inside the `core` folder, run `yarn install` +- Configure the nightwatch settings by copying `.env.example` to `.env` and editing as necessary. +- Ensure you have a web server running (as instructed in `.env`) +- Again inside the `core` folder, run `yarn test:nightwatch` to run the tests. By default this will output reports to `core/reports` +- Nightwatch will run tests for core, as well as contrib and custom modules and themes. It will search for tests located under folders with the pattern `**/tests/**/Nightwatch/(Tests|Commands|Assertions)` +- To run only core tests, run `yarn test:nightwatch --tag core` +- To skip running core tests, run `yarn test:nightwatch --skiptags core` +- To run a single test, run e.g. `yarn test:nightwatch tests/Drupal/Nightwatch/Tests/exampleTest.js` + +Nightwatch tests can be placed in any folder with the pattern `**/tests/**/Nightwatch/(Tests|Commands|Assertions)`. For example: +``` +tests/Nightwatch/Tests +src/tests/Nightwatch/Tests +tests/src/Nightwatch/Tests +tests/Nightwatch/Commands +``` + +It's helpful to follow existing patterns for test placement, so for the action module they would go in `core/modules/action/tests/src/Nightwatch`. +The Nightwatch configuration, as well as global tests, commands, and assertions which span many modules/systems, are located in `core/tests/Drupal/Nightwatch`. + +If your core directory is located in a subfolder (e.g. `docroot`), then you can edit the search directory in `.env` to pick up tests outside of your Drupal directory. +Tests outside of the `core` folder will run in the version of node you have installed. If you want to transpile with babel (e.g. to use `import` statements) outside of core, +then add your own babel config to the root of your project. For example, if core is located under `docroot/core`, then you could run `yarn add babel-preset-env` inside +`docroot`, then copy the babel settings from `docroot/core/package.json` into `docroot/package.json`.