Commit 7eb403bf by Alexander Makarov

Codeception test adjustments for basic and advanced applications

- Moved everything test-related into `tests` directory. Codeception tests are in `codeception`. - Removed database module since we're using fixtures and migrations. - Moved console entry points and bootstrap into `tests/codeception/bin`. - Adjusted travis build scripts. - Adjusted documentation to be consistent and reflect changes made.
parent dcf62a13
......@@ -47,10 +47,8 @@ before_script:
script:
- vendor/bin/phpunit --verbose --coverage-clover=coverage.clover --exclude-group mssql,oci,wincache,xcache,zenddata
- cd apps/basic && php vendor/bin/codecept run
- cd ../advanced/backend && ../vendor/bin/codecept run
- cd ../common && ../vendor/bin/codecept run
- cd ../frontend && ../vendor/bin/codecept run
- cd apps/basic/tests && php ../vendor/bin/codecept run
- cd ../../advanced/tests && ../vendor/bin/codecept run
after_script:
- cd ../../..
......
......@@ -95,35 +95,3 @@ the installed application. You only need to do these once for all.
To login into the application, you need to first sign up, with any of your email address, username and password.
Then, you can login into the application with same email address and password at any time.
TESTING
-------
Install additional composer packages:
* `php composer.phar require --dev codeception/codeception:2.0.* codeception/specify:* codeception/verify:* yiisoft/yii2-faker:*`
This application boilerplate use database in testing, so you should create three databases that are used in tests:
* `yii2_advanced_unit` - database for unit tests;
* `yii2_advanced_functional` - database for functional tests;
* `yii2_advanced_acceptance` - database for acceptance tests.
To make your database up to date, you can run in needed test folder `yii migrate`, for example
if you are starting from `frontend` tests then you should run `yii migrate` in each suite folder `acceptance`, `functional`, `unit`
it will upgrade your database to the last state according migrations.
To be able to run acceptance tests you need a running webserver. For this you can use the php builtin server and run it in the directory where your main project folder is located. For example if your application is located in `/www/advanced` all you need to is:
`cd /www` and then `php -S 127.0.0.1:8080` because the default configuration of acceptance tests expects the url of the application to be `/advanced/`.
If you already have a server configured or your application is not located in a folder called `advanced`, you may need to adjust the `test_entry_url` in `backend/codeception.yml` and `frontend/codeception.yml`.
After that is done you should be able to run your tests, for example to run `frontend` tests do:
* `cd frontend`
* `../vendor/bin/codecept build`
* `../vendor/bin/codecept run`
In similar way you can run tests for other application tiers - `backend`, `console`, `common`.
If you already have run `../vendor/bin/codecept build` for each application, you can run all tests by one command: `vendor/bin/codecept run`
You also can adjust you application suite configs and `_bootstrap.php` settings to use other urls and files, as it is can be done in `yii2-basic`.
Current template also includes [yii2-faker](https://github.com/yiisoft/yii2/tree/master/extensions/faker) extension, that is correctly setup for each application tier.
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_acceptance',
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_functional',
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
include:
- common
- console
- backend
- frontend
paths:
log: tests/_log
settings:
colors: true
namespace: common
actor: Tester
paths:
tests: tests
log: tests/_log
data: tests/_data
helpers: tests/_helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
modules:
config:
Db:
dsn: ''
user: ''
password: ''
dump: tests/_data/dump.sql
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../../vendor/autoload.php');
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require_once(__DIR__ . '/../../common/config/aliases.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
/* Replace this file with actual dump of your database */
\ No newline at end of file
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_unit',
],
],
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => '@common/tests/unit/fixtures/data',
'templatePath' => '@common/tests/templates/fixtures'
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
......@@ -22,13 +22,8 @@
"require-dev": {
"yiisoft/yii2-codeception": "*",
"yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*"
},
"suggest": {
"codeception/codeception": "Codeception, 2.0.* is currently works well with Yii.",
"codeception/specify": "BDD style code blocks for PHPUnit and Codeception",
"codeception/verify": "BDD Assertions for PHPUnit and Codeception",
"yiisoft/yii2-faker": "Fixtures generator for Yii2 based on Faker lib"
"yiisoft/yii2-gii": "*",
"yiisoft/yii2-faker": "*"
},
"scripts": {
"post-create-project-cmd": [
......
namespace: console
actor: Tester
paths:
tests: tests
log: tests/_log
data: tests/_data
helpers: tests/_helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
modules:
config:
Db:
dsn: ''
user: ''
password: ''
dump: tests/_data/dump.sql
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../../vendor/autoload.php');
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require_once(__DIR__ . '/../../common/config/aliases.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
/* Replace this file with actual dump of your database */
\ No newline at end of file
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_unit',
],
],
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => '@console/tests/unit/fixtures/data',
'templatePath' => '@common/tests/templates/fixtures'
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../../vendor/autoload.php');
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require_once(__DIR__ . '/../../common/config/aliases.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
/* Replace this file with actual dump of your database */
\ No newline at end of file
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_acceptance',
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_functional',
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
@echo off
rem -------------------------------------------------------------
rem Yii command line bootstrap script for Windows.
rem
rem @author Qiang Xue <qiang.xue@gmail.com>
rem @link http://www.yiiframework.com/
rem @copyright Copyright &copy; 2012 Yii Software LLC
rem @license http://www.yiiframework.com/license/
rem -------------------------------------------------------------
@setlocal
set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
@endlocal
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_unit',
],
],
]
);
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_unit',
],
],
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => '@frontend/tests/unit/fixtures/data',
'templatePath' => '@common/tests/templates/fixtures'
],
],
]
);
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../_console.php');
$config = require(__DIR__ . '/_console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
@echo off
rem -------------------------------------------------------------
rem Yii command line bootstrap script for Windows.
rem
rem @author Qiang Xue <qiang.xue@gmail.com>
rem @link http://www.yiiframework.com/
rem @copyright Copyright &copy; 2012 Yii Software LLC
rem @license http://www.yiiframework.com/license/
rem -------------------------------------------------------------
@setlocal
set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
@endlocal
This directory contains various tests for the advanced applications.
Tests in `codeception` directory are developed with [Codeception PHP Testing Framework](http://codeception.com/).
After creating and setting up the advanced application, follow these steps to prepare for the tests:
1. Install Codeception if it's not yet installed:
```
composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
```
If you've never used Composer for global packages run `composer global status`. It should output:
```
Changed current directory to <directory>
```
Then add `<directory>/vendor/bin` to you `PATH` environment variable. Now we're able to use `codecept` from command
line globally.
2. Install faker extension by running the following from template root directory where `composer.json` is:
```
composer require --dev yiisoft/yii2-faker:*
```
3. Create three databases that are used in tests:
* `yii2_advanced_unit` - for unit tests;
* `yii2_advanced_functional` - for functional tests;
* `yii2_advanced_acceptance` - for acceptance tests.
Then update databases by applying migrations:
```
codeception/bin/yii_acceptance migrate
codeception/bin/yii_functional migrate
codeception/bin/yii_unit migrate
```
4. In order to be able to run acceptance tests you need to start a webserver. The simplest way is to use PHP built in
webserver. In the root directory where `common`, `frontend` etc. are execute the following:
```
php -S localhost:8080
```
5. Now you can run the tests with the following commands:
```
# frontend tests
cd frontend
codecept build
codecept run
# backend tests
cd backend
codecept build
codecept run
# etc.
```
If you already have run `codecept build` for each application, you can run all tests by a single `codecept run` in the
`tests` directory.
include:
- codeception/common
- codeception/console
- codeception/backend
- codeception/frontend
paths:
log: codeception/_log
settings:
colors: true
......@@ -4,15 +4,17 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../../vendor/autoload.php');
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(__DIR__))));
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/aliases.php');
require_once(ROOT_DIR . '/vendor/autoload.php');
require_once(ROOT_DIR . '/vendor/yiisoft/yii2/Yii.php');
require(ROOT_DIR . '/common/config/aliases.php');
// set correct script paths
// the entry script file path for functional and acceptance tests
$_SERVER['SCRIPT_FILENAME'] = dirname(__DIR__) . '/web/index-test.php';
$_SERVER['SCRIPT_FILENAME'] = ROOT_DIR . '/backend/web/index-test.php';
$_SERVER['SCRIPT_NAME'] = \Codeception\Configuration::config()['config']['test_entry_url'];
$_SERVER['SERVER_NAME'] = 'localhost';
Yii::setAlias('@codeception', dirname(__DIR__));
......@@ -12,7 +12,7 @@ class_name: WebGuy
modules:
enabled:
- PhpBrowser
- common\tests\_helpers\FixtureHelper
- codeception\common\_helpers\FixtureHelper
# you can use WebDriver instead of PhpBrowser to test javascript and ajax.
# This will require you to install selenium. See http://codeception.com/docs/04-AcceptanceTests#Selenium
# "restart" option is used by the WebDriver to start each time per test-file new session and cookies,
......
<?php
use common\tests\_pages\LoginPage;
use backend\WebGuy;
use codeception_backend\WebGuy;
use codeception\common\_pages\LoginPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure login page works');
......
<?php
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(dirname(__DIR__)))));
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(ROOT_DIR . '/backend/config/main.php'),
require(ROOT_DIR . '/backend/config/main-local.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
namespace: backend
namespace: codeception_backend
actor: Tester
paths:
tests: tests
log: tests/_log
data: tests/_data
helpers: tests/_helpers
tests: .
log: _log
data: _data
helpers: _helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
modules:
config:
Db:
dsn: ''
user: ''
password: ''
dump: tests/_data/dump.sql
config:
# the entry script URL (without host info) for functional and acceptance tests
# PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
test_entry_url: /advanced/backend/web/index-test.php
test_entry_url: /backend/web/index-test.php
......@@ -11,7 +11,7 @@ modules:
enabled:
- Filesystem
- Yii2
- common\tests\_helpers\FixtureHelper
- codeception\common\_helpers\FixtureHelper
config:
Yii2:
configFile: 'tests/functional/_config.php'
configFile: 'functional/_config.php'
<?php
use common\tests\_pages\LoginPage;
use backend\TestGuy;
use codeception_backend\TestGuy;
use codeception\common\_pages\LoginPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure login page works');
......
<?php
// set correct script paths
$_SERVER['SCRIPT_FILENAME'] = dirname(dirname(__DIR__)) . '/web/index-test.php';
$_SERVER['SCRIPT_FILENAME'] = ROOT_DIR. '/backend/web/index-test.php';
$_SERVER['SCRIPT_NAME'] = \Codeception\Configuration::config()['config']['test_entry_url'];;
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(ROOT_DIR . '/backend/config/main.php'),
require(ROOT_DIR . '/backend/config/main-local.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(__DIR__ . '/../_config.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(ROOT_DIR . '/backend/config/main.php'),
require(ROOT_DIR . '/backend/config/main-local.php'),
require(dirname(__DIR__) . '/_config.php'),
[
'components' => [
'db' => [
......
......@@ -11,9 +11,11 @@
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require_once(__DIR__ . '/../../vendor/autoload.php');
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require_once(__DIR__ . '/../../common/config/aliases.php');
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(__DIR__))));
require_once(ROOT_DIR . '/vendor/autoload.php');
require_once(ROOT_DIR . '/vendor/yiisoft/yii2/Yii.php');
require_once(ROOT_DIR . '/common/config/aliases.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
require_once __DIR__ . '/_console_bootstrap.php';
$config = yii\helpers\ArrayHelper::merge(
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(ROOT_DIR . '/console/config/main.php'),
require(ROOT_DIR . '/console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_acceptance',
],
],
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => dirname(__DIR__) . '_data/fixtures',
'templatePath' => dirname(__DIR__) . '_data/templates'
],
],
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
......@@ -15,6 +15,6 @@ set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
"%PHP_COMMAND%" "%YII_PATH%yii_acceptance" %*
@endlocal
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
require_once __DIR__ . '/_console_bootstrap.php';
$config = yii\helpers\ArrayHelper::merge(
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(ROOT_DIR . '/console/config/main.php'),
require(ROOT_DIR . '/console/config/main-local.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_functional',
],
],
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => dirname(__DIR__) . '_data/fixtures',
'templatePath' => dirname(__DIR__) . '_data/templates'
],
],
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
......@@ -15,6 +15,6 @@ set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
"%PHP_COMMAND%" "%YII_PATH%yii_functional" %*
@endlocal
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(__DIR__ . '/../../../console/config/main.php'),
require(__DIR__ . '/../../../console/config/main-local.php'),
require_once __DIR__ . '/_console_bootstrap.php';
$config = yii\helpers\ArrayHelper::merge(
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(ROOT_DIR . '/console/config/main.php'),
require(ROOT_DIR . '/console/config/main-local.php'),
[
'components' => [
'db' => [
......@@ -14,9 +24,13 @@ return yii\helpers\ArrayHelper::merge(
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => '@backend/tests/unit/fixtures/data',
'templatePath' => '@commmon/tests/templates/fixtures'
'fixtureDataPath' => dirname(__DIR__) . '_data/fixtures',
'templatePath' => dirname(__DIR__) . '_data/templates'
],
],
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
......@@ -15,6 +15,6 @@ set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
"%PHP_COMMAND%" "%YII_PATH%yii_unit" %*
@endlocal
......@@ -4,11 +4,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../../vendor/autoload.php');
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(__DIR__))));
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/aliases.php');
require_once(ROOT_DIR . '/vendor/autoload.php');
require_once(ROOT_DIR . '/vendor/yiisoft/yii2/Yii.php');
require(ROOT_DIR . '/common/config/aliases.php');
// set correct script paths
$_SERVER['SERVER_NAME'] = 'localhost';
Yii::setAlias('@codeception', dirname(__DIR__));
\ No newline at end of file
<?php
namespace common\tests\_helpers;
namespace codeception\common\_helpers;
use codeception\common\fixtures\UserFixture;
use Codeception\Module;
use yii\test\FixtureTrait;
use common\tests\fixtures\UserFixture;
/**
* This helper is used to populate database with needed fixtures before any tests should be run.
......@@ -53,7 +53,7 @@ class FixtureHelper extends Module
return [
'user' => [
'class' => UserFixture::className(),
'dataFile' => '@common/tests/fixtures/data/init_login.php',
'dataFile' => '@codeception/common/fixtures/data/init_login.php',
],
];
}
......
<?php
namespace common\tests\_pages;
namespace codeception\common\_pages;
use yii\codeception\BasePage;
......
namespace: codeception_common
actor: Tester
paths:
tests: .
log: _log
data: _data
helpers: _helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
<?php
namespace common\tests\fixtures;
namespace codeception\common\fixtures;
use yii\test\ActiveFixture;
......
<?php
namespace frontend\tests\unit;
namespace codeception\common\unit;
class DbTestCase extends \yii\codeception\DbTestCase
{
public $appConfig = '@frontend/tests/unit/_config.php';
public $appConfig = '@codeception/common/unit/_config.php';
}
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
<?php
namespace common\tests\unit\models;
namespace codeception\common\unit\models;
use Yii;
use common\tests\unit\DbTestCase;
use codeception\common\unit\DbTestCase;
use Codeception\Specify;
use common\models\LoginForm;
use common\tests\fixtures\UserFixture;
use codeception\common\fixtures\UserFixture;
class LoginFormTest extends DbTestCase
{
......@@ -80,7 +80,7 @@ class LoginFormTest extends DbTestCase
return [
'user' => [
'class' => UserFixture::className(),
'dataFile' => '@common/tests/unit/fixtures/data/models/user.php'
'dataFile' => '@codeception/common/unit/fixtures/data/models/user.php'
],
];
}
......
......@@ -4,11 +4,13 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../../vendor/autoload.php');
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(__DIR__))));
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/aliases.php');
require_once(ROOT_DIR . '/vendor/autoload.php');
require_once(ROOT_DIR . '/vendor/yiisoft/yii2/Yii.php');
require(ROOT_DIR . '/common/config/aliases.php');
// set correct script paths
$_SERVER['SERVER_NAME'] = 'localhost';
Yii::setAlias('@codeception', dirname(__DIR__));
\ No newline at end of file
namespace: codeception_console
actor: Tester
paths:
tests: .
log: _log
data: _data
helpers: _helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
......@@ -4,15 +4,17 @@ defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../../vendor/autoload.php');
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(__DIR__))));
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/aliases.php');
require_once(ROOT_DIR . '/vendor/autoload.php');
require_once(ROOT_DIR . '/vendor/yiisoft/yii2/Yii.php');
require(ROOT_DIR . '/common/config/aliases.php');
// set correct script paths
// the entry script file path for functional and acceptance tests
$_SERVER['SCRIPT_FILENAME'] = dirname(__DIR__) . '/web/index-test.php';
$_SERVER['SCRIPT_FILENAME'] = ROOT_DIR . '/frontend/web/index-test.php';
$_SERVER['SCRIPT_NAME'] = \Codeception\Configuration::config()['config']['test_entry_url'];
$_SERVER['SERVER_NAME'] = 'localhost';
Yii::setAlias('@codeception', dirname(__DIR__));
\ No newline at end of file
<?php
namespace frontend\tests\_pages;
namespace codeception\frontend\_pages;
use yii\codeception\BasePage;
......
<?php
namespace frontend\tests\_pages;
namespace codeception\frontend\_pages;
use yii\codeception\BasePage;
......
<?php
namespace frontend\tests\_pages;
namespace codeception\frontend\_pages;
use \yii\codeception\BasePage;
......
......@@ -12,7 +12,7 @@ class_name: WebGuy
modules:
enabled:
- PhpBrowser
- common\tests\_helpers\FixtureHelper
- codeception\common\_helpers\FixtureHelper
# you can use WebDriver instead of PhpBrowser to test javascript and ajax.
# This will require you to install selenium. See http://codeception.com/docs/04-AcceptanceTests#Selenium
# "restart" option is used by the WebDriver to start each time per test-file new session and cookies,
......
<?php
use frontend\tests\_pages\AboutPage;
use frontend\WebGuy;
use codeception_frontend\WebGuy;
use codeception\frontend\_pages\AboutPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure that about works');
......
<?php
use frontend\tests\_pages\ContactPage;
use frontend\WebGuy;
use codeception_frontend\WebGuy;
use codeception\frontend\_pages\ContactPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure that contact works');
......
<?php
use frontend\WebGuy;
use codeception_frontend\WebGuy;
$I = new WebGuy($scenario);
$I->wantTo('ensure that home page works');
......
<?php
use common\tests\_pages\LoginPage;
use frontend\WebGuy;
use codeception_frontend\WebGuy;
use codeception\common\_pages\LoginPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure login page works');
......
<?php
namespace frontend\tests\acceptance;
namespace codeception\frontend\acceptance;
use frontend\tests\_pages\SignupPage;
use codeception\frontend\_pages\SignupPage;
use common\models\User;
class SignupCest
......
<?php
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(dirname(__DIR__)))));
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(ROOT_DIR . '/frontend/config/main.php'),
require(ROOT_DIR . '/frontend/config/main-local.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
namespace: frontend
namespace: codeception_frontend
actor: Tester
paths:
tests: tests
log: tests/_log
data: tests/_data
helpers: tests/_helpers
tests: .
log: _log
data: _data
helpers: _helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
colors: true
memory_limit: 1024M
log: true
modules:
config:
Db:
dsn: ''
user: ''
password: ''
dump: tests/_data/dump.sql
config:
# the entry script URL (without host info) for functional and acceptance tests
# PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
test_entry_url: /advanced/frontend/web/index-test.php
test_entry_url: /frontend/web/index-test.php
......@@ -11,7 +11,7 @@ modules:
enabled:
- Filesystem
- Yii2
- common\tests\_helpers\FixtureHelper
- codeception\common\_helpers\FixtureHelper
config:
Yii2:
configFile: 'tests/functional/_config.php'
configFile: 'functional/_config.php'
<?php
use frontend\tests\_pages\AboutPage;
use frontend\TestGuy;
use codeception_frontend\TestGuy;
use codeception\frontend\_pages\AboutPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure that about works');
......
<?php
use frontend\tests\_pages\ContactPage;
use frontend\TestGuy;
use codeception_frontend\TestGuy;
use codeception\frontend\_pages\ContactPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure that contact works');
......
<?php
use frontend\TestGuy;
use codeception_frontend\TestGuy;
$I = new TestGuy($scenario);
$I->wantTo('ensure that home page works');
$I->amOnPage(Yii::$app->homeUrl);
......
<?php
use common\tests\_pages\LoginPage;
use frontend\TestGuy;
use codeception_frontend\TestGuy;
use codeception\common\_pages\LoginPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure login page works');
......
<?php
namespace frontend\tests\functional;
namespace codeception\frontend\functional;
use frontend\tests\_pages\SignupPage;
use codeception\frontend\_pages\SignupPage;
use common\models\User;
class SignupCest
......
<?php
// set correct script paths
$_SERVER['SCRIPT_FILENAME'] = dirname(dirname(__DIR__)) . '/web/index-test.php';
$_SERVER['SCRIPT_FILENAME'] = ROOT_DIR . '/frontend/web/index-test.php';
$_SERVER['SCRIPT_NAME'] = \Codeception\Configuration::config()['config']['test_entry_url'];;
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/main.php'),
require(__DIR__ . '/../../config/main-local.php'),
require(__DIR__ . '/../../../common/config/main.php'),
require(__DIR__ . '/../../../common/config/main-local.php'),
require(ROOT_DIR . '/frontend/config/main.php'),
require(ROOT_DIR . '/frontend/config/main-local.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
<?php
namespace common\tests\unit;
namespace codeception\frontend\unit;
class DbTestCase extends \yii\codeception\DbTestCase
{
public $appConfig = '@common/tests/unit/_config.php';
public $appConfig = '@codeception/frontend/unit/_config.php';
}
<?php
namespace frontend\tests\unit;
namespace codeception\frontend\unit;
class TestCase extends \yii\codeception\TestCase
{
public $appConfig = '@frontend/tests/unit/_config.php';
public $appConfig = '@codeception/frontend/unit/_config.php';
}
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/console.php'),
require(ROOT_DIR . '/common/config/main.php'),
require(ROOT_DIR . '/common/config/main-local.php'),
require(ROOT_DIR . '/frontend/config/main.php'),
require(ROOT_DIR . '/frontend/config/main-local.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_acceptance',
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_unit',
],
],
]
......
<?php
namespace frontend\tests\unit\models;
namespace codeception\frontend\unit\models;
use Yii;
use frontend\tests\unit\TestCase;
use codeception\frontend\unit\TestCase;
use frontend\models\ContactForm;
class ContactFormTest extends TestCase
......
<?php
namespace frontend\tests\unit\models;
namespace codeception\frontend\tests\models;
use Yii;
use frontend\tests\unit\DbTestCase;
use codeception\frontend\unit\DbTestCase;
use frontend\models\PasswordResetRequestForm;
use common\tests\fixtures\UserFixture;
use codeception\common\fixtures\UserFixture;
use common\models\User;
use Codeception\Specify;
......@@ -75,7 +75,7 @@ class PasswordResetRequestFormTest extends DbTestCase
return [
'user' => [
'class' => UserFixture::className(),
'dataFile' => '@frontend/tests/unit/fixtures/data/models/user.php'
'dataFile' => '@codeception/frontend/unit/fixtures/data/models/user.php'
],
];
}
......
<?php
namespace frontend\tests\unit\models;
namespace codeception\frontend\unit\models;
use frontend\tests\unit\DbTestCase;
use common\tests\fixtures\UserFixture;
use codeception\frontend\unit\DbTestCase;
use codeception\common\fixtures\UserFixture;
use frontend\models\ResetPasswordForm;
class ResetPasswordFormTest extends DbTestCase
{
/**
* @expectedException yii\base\InvalidParamException
* @expectedException \yii\base\InvalidParamException
*/
public function testResetWrongToken()
{
......@@ -18,7 +18,7 @@ class ResetPasswordFormTest extends DbTestCase
}
/**
* @expectedException yii\base\InvalidParamException
* @expectedException \yii\base\InvalidParamException
*/
public function testResetEmptyToken()
{
......@@ -36,7 +36,7 @@ class ResetPasswordFormTest extends DbTestCase
return [
'user' => [
'class' => UserFixture::className(),
'dataFile' => '@frontend/tests/unit/fixtures/data/models/user.php'
'dataFile' => '@codeception/frontend/unit/fixtures/data/models/user.php'
],
];
}
......
<?php
namespace frontend\tests\unit\models;
namespace codeception\frontend\unit\models;
use frontend\tests\unit\DbTestCase;
use common\tests\fixtures\UserFixture;
use codeception\frontend\unit\DbTestCase;
use codeception\common\fixtures\UserFixture;
use Codeception\Specify;
use frontend\models\SignupForm;
......@@ -45,7 +45,7 @@ class SignupFormTest extends DbTestCase
return [
'user' => [
'class' => UserFixture::className(),
'dataFile' => '@frontend/tests/unit/fixtures/data/models/user.php',
'dataFile' => '@codeception/frontend/unit/fixtures/data/models/user.php',
],
];
}
......
......@@ -24,11 +24,6 @@
"yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*"
},
"suggest": {
"codeception/codeception": "Codeception, 2.0.* is currently works well with Yii.",
"codeception/specify": "BDD style code blocks for PHPUnit and Codeception",
"codeception/verify": "BDD Assertions for PHPUnit and Codeception"
},
"scripts": {
"post-create-project-cmd": [
"yii\\composer\\Installer::setPermission",
......
This folder contains various tests for the basic application.
These tests are developed with [Codeception PHP Testing Framework](http://codeception.com/).
This directory contains various tests for the basic application.
Tests in `codeception` directory are developed with [Codeception PHP Testing Framework](http://codeception.com/).
After creating the basic application, follow these steps to prepare for the tests:
1. Install additional composer packages:
1. Install Codeception if it's not yet installed:
```
composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
```
If you've never used Composer for global packages run `composer global status`. It should output:
```
Changed current directory to <directory>
```
```
php composer.phar require --dev "codeception/codeception: 2.0.*" "codeception/specify: *" "codeception/verify: *"
```
2. In the file `_bootstrap.php`, modify the definition of the constant `TEST_ENTRY_URL` so
that it points to the correct entry script URL.
3. Go to the application base directory and build the test suites:
Then add `<directory>/vendor/bin` to you `PATH` environment variable. Now we're able to use `codecept` from command
line globally.
```
vendor/bin/codecept build
```
2. Build the test suites:
```
codecept build
```
3. In order to be able to run acceptance tests you need to start a webserver. The simplest way is to use PHP built in
webserver. In the `web` directory execute the following:
```
php -S localhost:8080
```
Now you can run the tests with the following commands:
4. Now you can run the tests with the following commands:
```
# run all available tests
vendor/bin/codecept run
codecept run
# run acceptance tests
vendor/bin/codecept run acceptance
codecept run acceptance
# run functional tests
vendor/bin/codecept run functional
codecept run functional
# run unit tests
vendor/bin/codecept run unit
codecept run unit
```
Please refer to [Codeception tutorial](http://codeception.com/docs/01-Introduction) for
......
/* Replace this file with actual dump of your database */
\ No newline at end of file
@echo off
rem -------------------------------------------------------------
rem Yii command line bootstrap script for Windows.
rem
rem @author Qiang Xue <qiang.xue@gmail.com>
rem @link http://www.yiiframework.com/
rem @copyright Copyright &copy; 2012 Yii Software LLC
rem @license http://www.yiiframework.com/license/
rem -------------------------------------------------------------
@setlocal
set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
@endlocal
actor: Tester
paths:
tests: tests
log: tests/_log
data: tests/_data
helpers: tests/_helpers
tests: codeception
log: codeception/_log
data: codeception/_data
helpers: codeception/_helpers
settings:
bootstrap: _bootstrap.php
suite_class: \PHPUnit_Framework_TestSuite
......@@ -16,4 +16,4 @@ modules:
dsn: ''
user: ''
password: ''
dump: tests/_data/dump.sql
dump: codeception/_data/dump.sql
......@@ -2,22 +2,22 @@
// the entry script URL (without host info) for functional and acceptance tests
// PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/basic/web/index-test.php');
defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/index-test.php');
// the entry script file path for functional and acceptance tests
defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(dirname(__DIR__)) . '/web/index-test.php');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../vendor/autoload.php');
require_once(__DIR__ . '/../../vendor/autoload.php');
require_once(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
// set correct script paths
$_SERVER['SCRIPT_FILENAME'] = TEST_ENTRY_FILE;
$_SERVER['SCRIPT_NAME'] = TEST_ENTRY_URL;
$_SERVER['SERVER_NAME'] = 'localhost';
Yii::setAlias('@tests', __DIR__);
Yii::setAlias('@codeception', __DIR__);
<?php
namespace tests\_pages;
namespace codeception\_pages;
use yii\codeception\BasePage;
......
<?php
namespace tests\_pages;
namespace codeception\_pages;
use yii\codeception\BasePage;
......
<?php
namespace tests\_pages;
namespace codeception\_pages;
use yii\codeception\BasePage;
......
<?php
use tests\_pages\AboutPage;
use codeception\_pages\AboutPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure that about works');
......
<?php
use tests\_pages\ContactPage;
use codeception\_pages\ContactPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure that contact works');
......
<?php
use tests\_pages\LoginPage;
use codeception\_pages\LoginPage;
$I = new WebGuy($scenario);
$I->wantTo('ensure that login works');
......
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/web.php'),
require(__DIR__ . '/../../../config/web.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
......@@ -8,5 +8,7 @@ defined('YII_ENV') or define('YII_ENV', 'test');
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
defined('ROOT_DIR') or define('ROOT_DIR', dirname(dirname(dirname(__DIR__))));
require(ROOT_DIR . '/vendor/autoload.php');
require(ROOT_DIR . '/vendor/yiisoft/yii2/Yii.php');
......@@ -8,9 +8,19 @@
* @license http://www.yiiframework.com/license/
*/
require_once __DIR__ . '/../_console_bootstrap.php';
require_once __DIR__ . '/_console_bootstrap.php';
$config = require(__DIR__ . '/_console.php');
$config = yii\helpers\ArrayHelper::merge(
require(ROOT_DIR . '/config/console.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_acceptance',
],
],
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
......
......@@ -15,6 +15,6 @@ set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
"%PHP_COMMAND%" "%YII_PATH%yii_acceptance" %*
@endlocal
......@@ -8,9 +8,19 @@
* @license http://www.yiiframework.com/license/
*/
require_once __DIR__ . '/../_console_bootstrap.php';
require_once __DIR__ . '/_console_bootstrap.php';
$config = require(__DIR__ . '/_console.php');
$config = yii\helpers\ArrayHelper::merge(
require(ROOT_DIR . '/config/console.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_functional',
],
],
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
......
......@@ -15,6 +15,6 @@ set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
"%PHP_COMMAND%" "%YII_PATH%yii_functional" %*
@endlocal
......@@ -8,9 +8,19 @@
* @license http://www.yiiframework.com/license/
*/
require_once __DIR__ . '/../_console_bootstrap.php';
require_once __DIR__ . '/_console_bootstrap.php';
$config = require(__DIR__ . '/_console.php');
$config = yii\helpers\ArrayHelper::merge(
require(ROOT_DIR . '/config/console.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_unit',
],
],
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
......
......@@ -15,6 +15,6 @@ set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
"%PHP_COMMAND%" "%YII_PATH%yii_unit" %*
@endlocal
......@@ -13,4 +13,4 @@ modules:
- Yii2
config:
Yii2:
configFile: 'tests/functional/_config.php'
configFile: 'codeception/functional/_config.php'
<?php
use tests\_pages\AboutPage;
use codeception\_pages\AboutPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure that about works');
......
<?php
use tests\_pages\ContactPage;
use codeception\_pages\ContactPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure that contact works');
......
<?php
use tests\_pages\LoginPage;
use codeception\_pages\LoginPage;
$I = new TestGuy($scenario);
$I->wantTo('ensure that login works');
......
......@@ -5,7 +5,7 @@ $_SERVER['SCRIPT_FILENAME'] = TEST_ENTRY_FILE;
$_SERVER['SCRIPT_NAME'] = TEST_ENTRY_URL;
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/web.php'),
require(__DIR__ . '/../../../config/web.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/web.php'),
require(__DIR__ . '/../../../config/web.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
......
<?php
namespace tests\unit\models;
namespace codeception\unit\models;
use Yii;
use yii\codeception\TestCase;
......
<?php
namespace tests\unit\models;
namespace codeception\unit\models;
use Yii;
use yii\codeception\TestCase;
......
<?php
namespace tests\unit\models;
namespace codeception\unit\models;
use yii\codeception\TestCase;
......
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/console.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_functional',
],
],
]
);
@echo off
rem -------------------------------------------------------------
rem Yii command line bootstrap script for Windows.
rem
rem @author Qiang Xue <qiang.xue@gmail.com>
rem @link http://www.yiiframework.com/
rem @copyright Copyright &copy; 2012 Yii Software LLC
rem @license http://www.yiiframework.com/license/
rem -------------------------------------------------------------
@setlocal
set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
@endlocal
<?php
return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/console.php'),
require(__DIR__ . '/../_config.php'),
[
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_unit',
],
],
]
);
@echo off
rem -------------------------------------------------------------
rem Yii command line bootstrap script for Windows.
rem
rem @author Qiang Xue <qiang.xue@gmail.com>
rem @link http://www.yiiframework.com/
rem @copyright Copyright &copy; 2012 Yii Software LLC
rem @license http://www.yiiframework.com/license/
rem -------------------------------------------------------------
@setlocal
set YII_PATH=%~dp0
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
"%PHP_COMMAND%" "%YII_PATH%yii" %*
@endlocal
......@@ -11,6 +11,6 @@ defined('YII_ENV') or define('YII_ENV', 'test');
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/../tests/acceptance/_config.php');
$config = require(__DIR__ . '/../tests/codeception/acceptance/_config.php');
(new yii\web\Application($config))->run();
......@@ -4,23 +4,8 @@ Acceptance Tests
> Note: This section is under development.
- http://codeception.com/docs/04-AcceptanceTests
- https://github.com/yiisoft/yii2/blob/master/apps/advanced/README.md#testing
- https://github.com/yiisoft/yii2/blob/master/apps/basic/tests/README.md
How to run webserver
--------------------
Running basic and advanced template acceptance tests
----------------------------------------------------
In order to perform acceptance tests you need a web server. Since PHP 5.4 has built-in one, we can use it. For the basic
application template it would be:
```
cd web
php -S localhost:8080
```
In order for the tests to work correctly you need to adjust `TEST_ENTRY_URL` in `_bootstrap.php` file. It should point
to `index-test.php` of your webserver. Since we're running directly from its directory the line would be:
```php
defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/index-test.php');
```
Please refer to instructions provided in `apps/advanced/tests/README.md` and `apps/basic/tests/README.md`.
Functional Tests
----------------
================
> Note: This section is under development.
- http://codeception.com/docs/05-FunctionalTests
- https://github.com/yiisoft/yii2/blob/master/apps/advanced/README.md#testing
- https://github.com/yiisoft/yii2/blob/master/apps/basic/tests/README.md
Running basic and advanced template functional tests
----------------------------------------------------
Please refer to instructions provided in `apps/advanced/tests/README.md` and `apps/basic/tests/README.md`.
\ No newline at end of file
......@@ -34,4 +34,11 @@ composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
```
That's it. Now we're able to use `codecept` from command line.
If you've never used Composer for global packages run `composer global status`. It should output:
```
Changed current directory to <directory>
```
Then add `<directory>/vendor/bin` to you `PATH` environment variable. Now we're able to use `codecept` from command
line globally.
......@@ -3,11 +3,6 @@ Unit Tests
> Note: This section is under development.
TODO:
- https://github.com/yiisoft/yii2/blob/master/apps/advanced/README.md#testing
- https://github.com/yiisoft/yii2/blob/master/apps/basic/tests/README.md
A unit test verifies that a single unit of code is working as expected. In object-oriented programming, the most basic
code unit is a class. A unit test thus mainly needs to verify that each of the class interface methods works properly.
That is, given different input parameters, the test verifies the method returns expected results.
......@@ -16,4 +11,9 @@ Unit tests are usually developed by people who write the classes being tested.
Unit testing in Yii is built on top of PHPUnit and, optionally, Codeception so it's recommended to go through their docs:
- [PHPUnit docs starting from chapter 2](http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html).
- [Codeception Unit Tests](http://codeception.com/docs/06-UnitTests).
\ No newline at end of file
- [Codeception Unit Tests](http://codeception.com/docs/06-UnitTests).
Running basic and advanced template unit tests
----------------------------------------------
Please refer to instructions provided in `apps/advanced/tests/README.md` and `apps/basic/tests/README.md`.
......@@ -29,57 +29,6 @@ You can now execute unit tests by running `phpunit`.
You may limit the tests to a group of tests you are working on e.g. to run only tests for the validators and redis
`phpunit --group=validators,redis`.
Functional and acceptance tests
-------------------------------
In order to run functional and acceptance tests you need to install additional composer packages for the application you're going
to test. Add the following four packages to your `composer.json` `require-dev` section:
```
"yiisoft/yii2-codeception": "*",
```
For advanced application you may need `yiisoft/yii2-faker: *` as well.
Then for the basic application template run `./build/build app/link basic`. For advanced template command is
`./build/build app/link advanced`.
After package installation is complete you can run the following for basic app:
```
cd apps/basic
codecept build
codecept run
```
For advanced application frontend it will be:
```
cd apps/advanced/frontend
codecept build
codecept run
```
Note that you need a running webserver in order to pass acceptance tests. That can be easily achieved with PHP's built-in
webserver:
```
cd apps/advanced/frontend/www
php -S 127.0.0.1:8080
```
Note that you should have Codeception and PHPUnit installed globally:
```
composer global require "phpunit/phpunit=4.1.*"
composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
```
After running commands you'll see "Changed current directory to /your/global/composer/dir" message. If it's the
first time you're installing a package globally you need to add `/your/global/composer/dir/vendor/bin/` to your `PATH`.
Extensions
----------
......@@ -89,3 +38,7 @@ Just add them to the `composer.json` as you would normally do e.g. add `"yiisoft
Running `./build/build app/link basic` will install the extension and its dependecies and create
a symlink to `extensions/redis` so you are not working the composer vendor dir but the yii2 repo directly.
Functional and acceptance tests for applications
------------------------------------------------
See `apps/advanced/tests/README.md` and `apps/basic/tests/README.md` to learn about how to run Codeception tests.
......@@ -31,7 +31,7 @@ class TestCase extends Test
* The application configuration array may contain an optional `class` element which specifies the class
* name of the application instance to be created. By default, a [[\yii\web\Application]] instance will be created.
*/
public $appConfig = '@tests/unit/_config.php';
public $appConfig = '@codeception/unit/_config.php';
/**
......
......@@ -7,8 +7,9 @@ else
mysql -e 'CREATE DATABASE yii2_advanced_acceptance;';
mysql -e 'CREATE DATABASE yii2_advanced_functional;';
mysql -e 'CREATE DATABASE yii2_advanced_unit;';
cd apps/advanced/frontend/tests/acceptance && php yii migrate --interactive=0
cd ../functional && php yii migrate --interactive=0
cd ../unit && php yii migrate --interactive=0 && cd ../../../../..
cd apps/advanced/tests/codeception/bin
php yii_acceptance migrate --interactive=0
php yii_functional migrate --interactive=0
php yii_unit migrate --interactive=0
cd ../../../../..
fi
......@@ -9,7 +9,7 @@ else
composer install --dev --prefer-dist -d apps/basic
cd apps/basic && composer require --dev codeception/codeception:2.0.* codeception/specify:* codeception/verify:*
sed -i "s/'cookieValidationKey' => ''/'cookieValidationKey' => 'testkey'/" config/web.php
php vendor/bin/codecept build && cd ../..
cd tests && php vendor/bin/codecept build && cd ../../..
# advanced application:
......@@ -20,9 +20,9 @@ else
sed -i s/root/travis/ common/config/main-local.php
sed -i "s/'cookieValidationKey' => ''/'cookieValidationKey' => 'testkey'/" frontend/config/main.php
sed -i "s/'cookieValidationKey' => ''/'cookieValidationKey' => 'testkey'/" backend/config/main.php
cd backend && php ../vendor/bin/codecept build
cd ../common && php ../vendor/bin/codecept build
cd ../frontend && php ../vendor/bin/codecept build && cd ../../..
cd tests/codeception/backend && php ../../../vendor/bin/codecept build
cd ../../../common && php ../../../vendor/bin/codecept build
cd ../../../frontend && php ../../../vendor/bin/codecept build && cd ../../../../../..
# boot server
cd apps && php -S localhost:8080 > /dev/null 2>&1 &
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment