-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
ostashev
committed
May 31, 2016
1 parent
8c9c07d
commit ba52dcd
Showing
27 changed files
with
484 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
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 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 `yii2_basic_tests` database and update it by applying migrations (you may skip this step if you do not have created any migrations yet): | ||
|
||
``` | ||
codeception/bin/yii migrate | ||
``` | ||
|
||
The command needs to be run in the `tests` directory. | ||
The database configuration can be found at `tests/codeception/config/config.php`. | ||
|
||
4. Build the test suites: | ||
|
||
``` | ||
codecept build | ||
``` | ||
|
||
5. 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 | ||
``` | ||
|
||
6. Now you can run the tests with the following commands: | ||
|
||
``` | ||
# run all available tests | ||
codecept run | ||
# run acceptance tests | ||
codecept run acceptance | ||
# run functional tests | ||
codecept run functional | ||
# run unit tests | ||
codecept run unit | ||
``` | ||
|
||
Fixtures Default Configuration | ||
------------------------------ | ||
The `fixture` commands refer to the following `ActiveFixture` configuration by default: | ||
|
||
- Fixtures path: `@tests/unit/fixtures` | ||
- Fixtures data path: `@tests/unit/fixtures/data` | ||
- Template files path: `@tests/unit/templates/fixtures` | ||
- Namespace: `tests\unit\fixtures` | ||
|
||
Where `@tests` refers to `@app/tests/codeception`. | ||
|
||
Code coverage support | ||
--------------------- | ||
|
||
By default, code coverage is disabled in `codeception.yml` configuration file, you should uncomment needed rows to be able | ||
to collect code coverage. You can run your tests and collect coverage with the following command: | ||
|
||
``` | ||
#collect coverage for all tests | ||
codecept run --coverage-html --coverage-xml | ||
#collect coverage only for unit tests | ||
codecept run unit --coverage-html --coverage-xml | ||
#collect coverage for unit and functional tests | ||
codecept run functional,unit --coverage-html --coverage-xml | ||
``` | ||
|
||
You can see code coverage output under the `tests/_output` directory. | ||
|
||
###Remote code coverage | ||
|
||
When you run your tests not in the same process where code coverage is collected, then you should uncomment `remote` option and its | ||
related options, to be able to collect code coverage correctly. To setup remote code coverage you should follow [instructions](http://codeception.com/docs/11-Codecoverage) | ||
from codeception site. | ||
|
||
1. install `Codeception c3` remote support `composer require "codeception/c3:*"`; | ||
|
||
2. copy `c3.php` file under your `web` directory; | ||
|
||
3. include `c3.php` file in your `index-test.php` file before application run, so it can catch needed requests. | ||
|
||
4. edit `c3.php` to update config file path (~ line 55) with `$config_file = realpath(__DIR__ . '/../tests/codeception.yml');` | ||
|
||
Configuration options that are used by remote code coverage: | ||
|
||
- c3_url: url pointing to entry script that includes `c3.php` file, so `Codeception` will be able to produce code coverage; | ||
- remote: whether to enable remote code coverage or not; | ||
- remote_config: path to the `codeception.yml` configuration file, from the directory where `c3.php` file is located. This is needed | ||
so that `Codeception` can create itself instance and collect code coverage correctly. | ||
|
||
By default `c3_url` and `remote_config` setup correctly, you only need to copy and include `c3.php` file in your `index-test.php` | ||
|
||
After that you should be able to collect code coverage from tests that run through `PhpBrowser` or `WebDriver` with same command | ||
as for other tests: | ||
|
||
``` | ||
#collect coverage from remote | ||
codecept run acceptance --coverage-html --coverage-xml | ||
``` | ||
|
||
Please refer to [Codeception tutorial](http://codeception.com/docs/01-Introduction) for | ||
more details about writing and running acceptance, functional and unit tests. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
actor: Tester | ||
#coverage: | ||
# #c3_url: http://localhost:8080/index-test.php/ | ||
# enabled: true | ||
# #remote: true | ||
# #remote_config: '../tests/codeception.yml' | ||
# white_list: | ||
# include: | ||
# - ../models/* | ||
# - ../controllers/* | ||
# - ../commands/* | ||
# - ../mail/* | ||
# blacklist: | ||
# include: | ||
# - ../assets/* | ||
# - ../config/* | ||
# - ../runtime/* | ||
# - ../vendor/* | ||
# - ../views/* | ||
# - ../web/* | ||
# - ../tests/* | ||
paths: | ||
tests: codeception | ||
log: codeception/_output | ||
data: codeception/_data | ||
helpers: codeception/_support | ||
settings: | ||
bootstrap: _bootstrap.php | ||
suite_class: \PHPUnit_Framework_TestSuite | ||
memory_limit: 1024M | ||
log: true | ||
colors: true | ||
config: | ||
# the entry script URL (with host info) for functional and acceptance tests | ||
# PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL | ||
test_entry_url: http://localhost:8080/index-test.php |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# these files are auto generated by codeception build | ||
/unit/UnitTester.php | ||
/functional/FunctionalTester.php | ||
/acceptance/AcceptanceTester.php |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?php | ||
defined('YII_DEBUG') or define('YII_DEBUG', true); | ||
defined('YII_ENV') or define('YII_ENV', 'test'); | ||
|
||
defined('YII_TEST_ENTRY_URL') or define('YII_TEST_ENTRY_URL', parse_url(\Codeception\Configuration::config()['config']['test_entry_url'], PHP_URL_PATH)); | ||
defined('YII_TEST_ENTRY_FILE') or define('YII_TEST_ENTRY_FILE', dirname(dirname(__DIR__)) . '/web/index-test.php'); | ||
|
||
require_once(__DIR__ . '/../../vendor/autoload.php'); | ||
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); | ||
|
||
$_SERVER['SCRIPT_FILENAME'] = YII_TEST_ENTRY_FILE; | ||
$_SERVER['SCRIPT_NAME'] = YII_TEST_ENTRY_URL; | ||
$_SERVER['SERVER_NAME'] = parse_url(\Codeception\Configuration::config()['config']['test_entry_url'], PHP_URL_HOST); | ||
$_SERVER['SERVER_PORT'] = parse_url(\Codeception\Configuration::config()['config']['test_entry_url'], PHP_URL_PORT) ?: '80'; | ||
|
||
Yii::setAlias('@tests', dirname(__DIR__)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
* | ||
!.gitignore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
|
||
namespace tests\codeception\_pages; | ||
|
||
use yii\codeception\BasePage; | ||
|
||
/** | ||
* Represents contact page | ||
* @property \AcceptanceTester|\FunctionalTester $actor | ||
*/ | ||
class ContactPage extends BasePage | ||
{ | ||
public $route = 'site/contact'; | ||
|
||
/** | ||
* @param array $contactData | ||
*/ | ||
public function submit(array $contactData) | ||
{ | ||
foreach ($contactData as $field => $value) { | ||
$inputType = $field === 'body' ? 'textarea' : 'input'; | ||
$this->actor->fillField($inputType . '[name="ContactForm[' . $field . ']"]', $value); | ||
} | ||
$this->actor->click('contact-button'); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Codeception Test Suite Configuration | ||
|
||
# suite for acceptance tests. | ||
# perform tests in browser using the Selenium-like tools. | ||
# powered by Mink (http://mink.behat.org). | ||
# (tip: that's what your customer will see). | ||
# (tip: test your ajax and javascript by one of Mink drivers). | ||
|
||
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. | ||
|
||
class_name: AcceptanceTester | ||
modules: | ||
enabled: | ||
- PhpBrowser | ||
# you can use WebDriver instead of PhpBrowser to test javascript and ajax. | ||
# This will require you to install selenium. See http://codeception.com/docs/03-AcceptanceTests#selenium-webdriver | ||
# "restart" option is used by the WebDriver to start each time per test-file new session and cookies, | ||
# it is useful if you want to login in your app in each test. | ||
# - WebDriver | ||
config: | ||
PhpBrowser: | ||
# PLEASE ADJUST IT TO THE ACTUAL ENTRY POINT WITHOUT PATH INFO | ||
url: http://localhost:8080 | ||
# WebDriver: | ||
# url: http://localhost:8080 | ||
# browser: firefox | ||
# restart: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
<?php | ||
|
||
use tests\codeception\_pages\ContactPage; | ||
|
||
/* @var $scenario Codeception\Scenario */ | ||
|
||
$I = new AcceptanceTester($scenario); | ||
$I->wantTo('ensure that contact works'); | ||
|
||
$contactPage = ContactPage::openBy($I); | ||
|
||
$I->see('Contact', 'h1'); | ||
|
||
$I->amGoingTo('submit contact form with no data'); | ||
$contactPage->submit([]); | ||
if (method_exists($I, 'wait')) { | ||
$I->wait(3); // only for selenium | ||
} | ||
$I->expectTo('see validations errors'); | ||
$I->see('Contact', 'h1'); | ||
$I->see('Name cannot be blank'); | ||
$I->see('Email cannot be blank'); | ||
$I->see('Subject cannot be blank'); | ||
$I->see('Body cannot be blank'); | ||
$I->see('The verification code is incorrect'); | ||
|
||
$I->amGoingTo('submit contact form with not correct email'); | ||
$contactPage->submit([ | ||
'name' => 'tester', | ||
'email' => 'tester.email', | ||
'subject' => 'test subject', | ||
'body' => 'test content', | ||
'verifyCode' => 'testme', | ||
]); | ||
if (method_exists($I, 'wait')) { | ||
$I->wait(3); // only for selenium | ||
} | ||
$I->expectTo('see that email address is wrong'); | ||
$I->dontSee('Name cannot be blank', '.help-inline'); | ||
$I->see('Email is not a valid email address.'); | ||
$I->dontSee('Subject cannot be blank', '.help-inline'); | ||
$I->dontSee('Body cannot be blank', '.help-inline'); | ||
$I->dontSee('The verification code is incorrect', '.help-inline'); | ||
|
||
$I->amGoingTo('submit contact form with correct data'); | ||
$contactPage->submit([ | ||
'name' => 'tester', | ||
'email' => '[email protected]', | ||
'subject' => 'test subject', | ||
'body' => 'test content', | ||
'verifyCode' => 'testme', | ||
]); | ||
if (method_exists($I, 'wait')) { | ||
$I->wait(3); // only for selenium | ||
} | ||
$I->dontSeeElement('#contact-form'); | ||
$I->see('Thank you for contacting us. We will respond to you as soon as possible.'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
<?php | ||
new yii\web\Application(require(dirname(__DIR__) . '/config/acceptance.php')); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?php | ||
defined('YII_DEBUG') or define('YII_DEBUG', true); | ||
defined('YII_ENV') or define('YII_ENV', 'test'); | ||
|
||
defined('YII_APP_BASE_PATH') or define('YII_APP_BASE_PATH', dirname(dirname(dirname(__DIR__)))); | ||
|
||
require(YII_APP_BASE_PATH . '/vendor/autoload.php'); | ||
require(YII_APP_BASE_PATH . '/vendor/yiisoft/yii2/Yii.php'); | ||
|
||
Yii::setAlias('@tests', dirname(dirname(__DIR__))); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#!/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__ . '/_bootstrap.php'; | ||
|
||
$config = yii\helpers\ArrayHelper::merge( | ||
require(YII_APP_BASE_PATH . '/config/console.php'), | ||
require(__DIR__ . '/../config/config.php') | ||
); | ||
|
||
$application = new yii\console\Application($config); | ||
$exitCode = $application->run(); | ||
exit($exitCode); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
@echo off | ||
|
||
rem ------------------------------------------------------------- | ||
rem Yii command line bootstrap script for Windows. | ||
rem | ||
rem @author Qiang Xue <[email protected]> | ||
rem @link http://www.yiiframework.com/ | ||
rem @copyright Copyright (c) 2008 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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?php | ||
/** | ||
* Application configuration for acceptance tests | ||
*/ | ||
return yii\helpers\ArrayHelper::merge( | ||
require(__DIR__ . '/../../../config/web.php'), | ||
require(__DIR__ . '/config.php'), | ||
[ | ||
|
||
] | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
/** | ||
* Application configuration shared by all test types | ||
*/ | ||
return [ | ||
'language' => 'en-US', | ||
'controllerMap' => [ | ||
'fixture' => [ | ||
'class' => 'yii\faker\FixtureController', | ||
'fixtureDataPath' => '@tests/codeception/fixtures', | ||
'templatePath' => '@tests/codeception/templates', | ||
'namespace' => 'tests\codeception\fixtures', | ||
], | ||
], | ||
'components' => [ | ||
'db' => [ | ||
'dsn' => 'mysql:host=localhost;dbname=yii2_basic_tests', | ||
], | ||
'mailer' => [ | ||
'useFileTransport' => true, | ||
], | ||
'urlManager' => [ | ||
'showScriptName' => true, | ||
], | ||
], | ||
]; |
Oops, something went wrong.