2020-01-19 13:18:29 +01:00
The testing framework used is [PHPUnit ](https://phpunit.de/ ); it can be installed with [Composer ](https://getcomposer.org/ ), which is a dependency management tool.
2017-01-26 18:52:54 +01:00
2020-01-19 13:18:29 +01:00
## Setup a testing environment
2015-06-26 21:56:43 +02:00
2017-11-18 16:22:43 +01:00
### Install composer
2017-08-05 11:56:24 +02:00
2017-11-18 16:22:43 +01:00
You can either use:
2015-06-26 21:56:43 +02:00
2020-01-19 12:40:28 +01:00
- a system-wide version, e.g. installed through your distro's package manager (eg. `sudo apt install composer` )
- a local version, downloadable [here ](https://getcomposer.org/download/ ). To update a local composer installation, run `php composer.phar self-update`
2017-01-26 18:52:54 +01:00
2015-06-26 21:56:43 +02:00
2020-01-19 13:18:29 +01:00
### Install Shaarli development dependencies
2017-01-26 18:52:54 +01:00
2015-06-26 21:56:43 +02:00
```bash
$ cd /path/to/shaarli
2020-01-19 12:40:28 +01:00
$ composer install
2015-06-26 21:56:43 +02:00
$ composer update
```
2020-01-19 13:18:29 +01:00
### Install Xdebug
2017-01-26 18:52:54 +01:00
2020-01-19 13:11:11 +01:00
Xdebug must be installed and enable for PHPUnit to generate coverage reports. See http://xdebug.org/docs/install.
2017-11-18 16:22:43 +01:00
2015-06-26 21:56:43 +02:00
```bash
2020-01-19 13:09:23 +01:00
# for Debian-based distributions
2020-01-19 13:49:48 +01:00
$ aptitude install php-xdebug
2020-01-19 13:09:23 +01:00
# for ArchLinux:
2015-06-26 21:56:43 +02:00
$ pacman -S xdebug
```
2020-03-09 18:44:12 +01:00
Then add the following line to `/etc/php/<PHP_VERSION>/cli/php.ini` :
2020-01-19 13:11:11 +01:00
2015-06-26 21:56:43 +02:00
```ini
zend_extension=xdebug.so
```
2020-01-19 13:18:29 +01:00
## Run unit tests
2017-01-26 18:52:54 +01:00
2020-01-19 13:09:23 +01:00
Run `make test` and ensure tests return `OK` . If tests return failures, refer to PHPUnit messages and fix your code/tests accordingly.
2015-06-26 21:56:43 +02:00
2020-01-19 13:11:11 +01:00
By default, PHPUnit will run all suitable tests found under the `tests` directory. Each test has 3 possible outcomes:
2017-08-05 11:56:24 +02:00
- `.` - success
- `F` - failure: the test was run but its results are invalid
- the code does not behave as expected
- dependencies to external elements: globals, session, cache...
- `E` - error: something went wrong and the tested code has crashed
- typos in the code, or in the test code
- dependencies to missing external elements
2015-06-26 21:56:43 +02:00
If Xdebug has been installed and activated, two coverage reports will be generated:
2017-08-05 11:56:24 +02:00
- a summary in the console
- a detailed HTML report with metrics for tested code
- to open it in a web browser: `firefox coverage/index.html &`
2017-05-07 18:44:05 +02:00
### Executing specific tests
2017-01-26 18:52:54 +01:00
Add a [`@group` ](https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group ) annotation in a test class or method comment:
2017-05-07 18:44:05 +02:00
```php
/**
* Netscape bookmark import
* @group WIP
*/
class BookmarkImportTest extends PHPUnit_Framework_TestCase
{
2017-01-26 18:52:54 +01:00
[...]
2017-05-07 18:44:05 +02:00
}
```
To run all tests annotated with `@group WIP` :
```bash
$ vendor/bin/phpunit --group WIP tests/
```
2020-01-19 13:18:29 +01:00
### Running tests inside Docker containers
Test Dockerfiles are located under `tests/docker/<distribution>/Dockerfile` ,
and can be used to build Docker images to run Shaarli test suites under common
Linux environments.
Dockerfiles are provided for the following environments:
- `alpine36` - [Alpine 3.6 ](https://www.alpinelinux.org/downloads/ )
- `debian8` - [Debian 8 Jessie ](https://www.debian.org/DebianJessie ) (oldstable)
- `debian9` - [Debian 9 Stretch ](https://wiki.debian.org/DebianStretch ) (stable)
- `ubuntu16` - [Ubuntu 16.04 Xenial Xerus ](http://releases.ubuntu.com/16.04/ ) (LTS)
What's behind the curtains:
- each image provides:
- a base Linux OS
- Shaarli PHP dependencies (OS packages)
- test PHP dependencies (OS packages)
- Composer
- the local workspace is mapped to the container's `/shaarli/` directory,
- the files are rsync'd so tests are run using a standard Linux user account
(running tests as `root` would bypass permission checks and may hide issues)
- the tests are run inside the container.
To run tests inside a Docker container:
```bash
# build the Debian 9 Docker image for unit tests
$ cd /path/to/shaarli
$ cd tests/docker/debian9
$ docker build -t shaarli-test:debian9 .
# install/update 3rd-party test dependencies
$ composer install --prefer-dist
# run tests using the freshly built image
$ docker run -v $PWD:/shaarli shaarli-test:debian9 docker_test
# run the full test campaign
$ docker run -v $PWD:/shaarli shaarli-test:debian9 docker_all_tests
```