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
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
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
$config['databases']['mysql']['username'] = 'yiitest';
$config['databases']['mysql']['password'] = 'changeme';
Get started by going to the tests
directory and copy the environment configuration.
cd tests
cp .env-dist .env
The newly created .env
file defines the configuration files used by docker-compose
. By default MySQL, Postgres and Caching services are enabled.
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 theCOMPOSE_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
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 can be found at
yiisoft/yii2-docker
.
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
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
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}
cd tests
sh test-local.sh default
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