Yii 2.0 Unit tests ================== DIRECTORY STRUCTURE ------------------- data/ models, config and other test data config.php this file contains configuration for database and caching backends framework/ the framework unit tests runtime/ the application runtime dir for the yii test app HOW TO RUN THE TESTS -------------------- Make sure you have PHPUnit installed and that you installed all composer dependencies (run `composer update` in the repo base directory). Run PHPUnit in the yii repo base directory. ``` phpunit ``` You can run tests for specific groups only: ``` phpunit --group=mysql,base,i18n ``` You can get a list of available groups via `phpunit --list-groups`. A single test class could be run like the follwing: ``` phpunit tests/framework/base/ObjectTest.php ``` TEST CONFIGURATION ------------------ PHPUnit configuration is in `phpunit.xml.dist` in repository root folder. You can create your own phpunit.xml to override dist config. Database and other backend system configuration can be found in `tests/data/config.php` adjust them to your needs to allow testing databases and caching in your environment. You can override configuration values by creating a `config.local.php` file and manipulate the `$config` variable. For example to change MySQL username and password your `config.local.php` should contain the following: ```php You can choose services available for testing by merging `docker-compose.[...].yml` files in `.env`. For example, if you only want to test with MySQL, you can modify the `COMPOSE_FILE` variable as follows > COMPOSE_FILE=docker-compose.yml:docker-compose.mysql.yml When starting the stack now, you get containers for databases and caching servers to test with. docker-compose up -d After all services have been initialized and the stack is fully up and running enter the PHP container docker-compose exec php bash Run a group of unit tests $ vendor/bin/phpunit -v --group base --debug #### Examples for running phpunit in a separate container docker-compose run php vendor/bin/phpunit -v --group caching,db docker-compose run php vendor/bin/phpunit -v --exclude base,caching,db,i18n,log,mutex,rbac,validators,web docker-compose run php vendor/bin/phpunit -v --exclude mssql,oci,wincache,xcache,zenddata,cubrid > Note: Documentation about [installing additional extensions](https://github.com/yiisoft/yii2-docker/blob/master/docs/install-extensions.md) can be found at `yiisoft/yii2-docker`. ### Cubrid > Note: Images for testing Cubrid are based on PHP 5, due to incompatibilities with PHP 7 cd tests/cubrid docker-compose up -d docker-compose run php vendor/bin/phpunit -v --group cubrid ### MSSQL > Note: Images for testing MSSQL are based on `bylexus/apache-php7` (Ubuntu) since drivers are not available for Debian or Alpine. **experimental** - needs 3.5 GB RAM, Docker-host with >4.5 GB is recommended for testing - database CLI `tsgkadot/mssql-tools` Example commands cd tests/mssql Using a shell docker-compose run --rm sqlcmd sqlcmd -S mssql -U sa -P Microsoft-12345 Create database with sqlcmd $ sqlcmd -S mssql -U sa -P Microsoft-12345 -Q "CREATE DATABASE yii2test" Create database (one-liner) docker-compose run --rm sqlcmd sqlcmd -S mssql -U sa -P Microsoft-12345 -Q "CREATE DATABASE yii2test" Run MSSQL tests docker-compose run php $ vendor/bin/phpunit --group mssql ### Build triggers curl -X POST \ -F token=${TOKEN} \ -F ref=travis \ -F "variables[DOCKER_MYSQL_IMAGE]=mysql:5.6" \ -F "variables[DOCKER_POSTGRES_IMAGE]=postgres:9.5" \ ${TRIGGER_URL} ### Run tests locally #### Via shell script cd tests sh test-local.sh default #### Via runner *experimental* docker-compose configuration runner: image: schmunk42/gitlab-runner entrypoint: bash working_dir: /project volumes: - ../:/project - /var/run/docker.sock:/var/run/docker.sock environment: - RUNNER_BUILDS_DIR=${PWD}/.. Start runner bash docker-compose -f docker-compose.runner.yml run runner Execute jobs via shell runner (with docker-compose support) $ gitlab-runner exec shell build $ gitlab-runner exec shell test