4.7.16 release notes - result of initial automated run
[civicrm-core.git] / tests / README.md
CommitLineData
859c578d
TO
1To run the tests you need to configure it as described in the wiki:
2
3https://wiki.civicrm.org/confluence/display/CRMDOC/Testing
4
5## Configuration
6
7If the test environment has been created by a common build-profile using
8[buildkit](https://github.com/civicrm/civicrm-buildkit/)'s `civibuild`
9command (such as `drupal-clean` or `wp-demo`), then you should be able to
10execute tests without further configuration.
11
12Otherwise, you need to install [`cv`](https://github.com/civicrm/cv)
13and fill in missing test data:
14
15 * `cd` into your Drupal/WordPress site and run `cv vars:fill`. This will create a file `~/.cv.json`.
16 * Tip: If you need to share this installation with other local users, you may specify `export CV_CONFIG=/path/to/shared/file.json`
17 * Edit the file `~/.cv.json`. You may need to fill some or all of these details:
18 * Credentials for an administrative CMS user (`ADMIN_USER`, `ADMIN_PASS`, `ADMIN_EMAIL`)
19 * Credentials for a non-administrative CMS user (`DEMO_USER`, `DEMO_PASS`, `DEMO_EMAIL`)
20 * Credentials for an empty test database (`TEST_DB_DSN`)
21
22## Suites
23
24`civicrm-core` includes multiple test suites. Each suite makes use of the environment differently:
25
26| Runner | Suite | Type | CMS | Typical Base Class | Comment |
27| ------ | ----- | ---- | --- | ------------------ | ----------- |
28| PHPUnit |`api_v3_AllTests`|`headless`|Agnostic|`CiviUnitTestCase`|Requires `CIVICRM_UF=UnitTests`|
29| PHPUnit |`Civi\AllTests`|`headless`|Agnostic|`CiviUnitTestCase`|Requires `CIVICRM_UF=UnitTests`|
30| PHPUnit |`CRM_AllTests`|`headless`|Agnostic|`CiviUnitTestCase`|Requires `CIVICRM_UF=UnitTests`|
9e80c052 31| PHPUnit |`E2E_AllTests`|`e2e`|Agnostic|`CiviEndToEndTestCase`|Useful for command-line scripts and web-services|
859c578d
TO
32| PHPUnit |`WebTest_AllTests`|`e2e`|Drupal|`CiviSeleniumTestCase`|Useful for tests which require a full web-browser|
33| Karma ||`unit`|Agnostic|||
34| QUnit ||`e2e`|Agnostic||Run each test in a browser. See README.|
35
36Headless test suites like `CRM_AllTests` run on a secondary, headless CiviCRM database. They use a
37fake CMS/UF (named `UnitTests`) and aggressively manipulate the content of the database (e.g.
38truncating, dropping, or creating tables at a whim).
39
40E2E tests run against a full installation of CiviCRM with an active, integrated CMS. These tests
41may do some manipulation on the database, so be careful to only run these on developmental
42systems... and have a fallback-plan in case the tests screw-up your database.
43
44## PHPUnit Usage
45
46You may invoke the PHPUnit tests using the legacy wrapper command (`tools/scripts/phpunit`), e.g.
47
48```bash
49## Invoke "CRM_AllTests" with the legacy wrapper
50cd tools
51./scripts/phpunit CRM_AllTests
52
53## Invoke "E2E_AllTests" with the legacy wrapper
54cd tools
55./scripts/phpunit E2E_AllTests
56
57```
58
59The advantage of using the legacy wrapper is that works with multiple versions of CiviCRM (e.g.
60`4.4` or `4.7`) and has shorter commands. However, if you try to use it with an IDE, it
61may not work well.
62
63Alternatively, you may invoke the PHPUnit tests with a standalone copy of PHPUnit (e.g. `phpunit4`), e.g.
64
65```bash
66## Invoke "CRM_AllTests" using a standalone copy of PHPUnit
67env CIVICRM_UF=UnitTests phpunit4 ./tests/phpunit/CRM/AllTests.php
68
69## Invoke "E2E_AllTests" using a standalone copy of PHPUnit
70phpunit4 ./tests/phpunit/E2E/AllTests.php
71```
72
73The advantage of using a standalone copy of PHPUnit is that integrates better with an IDE.
74However, it's only supported on CiviCRM 4.7+, and you may need to set an environment variable.