Yii2中如何使用CodeCeption

Yii2和CodeCeption

CodeCeption是一個全棧的PHP測試框架,關於CodeCeption的介紹見:CodeCeption官方文檔php

Yii2官方增長了對CodeCeption的支持,這裏主要講解Yii2裏如何基於CodeCeption進行單元測試和功能測試。html

知識準備

執行後面操做的前提是本地已經正確安裝配置composer。git

經過腳手架開始一個Yii2項目

經過Composer,咱們能夠很簡單的在本地基於腳手架建立一個Yii2項目:github

  • 進入一個能夠經過web服務器訪問的目錄:cd <webroot>
  • 執行:composer global require "fxp/composer-asset-plugin:~1.0.0" 命令驗證必須插件是否全局安裝
  • 執行:composer create-project yiisoft/yii2-app-basic basic 命令在當前目錄的basic目錄建立一個」yiisoft/yii2-app/basic」腳手架項目。注意,若是是本地開發環境,你也能夠增長--prefer-dist --stability=dev選項,參考stability選項,這樣,composer會到github上拉取最新的開發包下來。

經過以上操做,你的本地目錄應該大體以下:web

複製代碼
webroot/basic
    |--- assets/
    |--- commands/
    |--- config/
    |--- controllers/
    |--- mail/
    |--- models/
    |--- runtime/
    |--- tests/
    |--- vendor/
    |--- views/
    |--- web/
    |--- .gitignore
    |--- composer.json
    |--- composer.lock
    ...
複製代碼

 

其中,tests就是框架默認建立的測試代碼目錄,裏面有框架提供的一些測試的例子,你能夠按以下步驟測試一下:json

  • cd basic/tests/ 進入CodeCeption測試用例所在目錄
  • codecept build 將構建測試用例(根據cept生成tester)
  • codecept run 運行測試用例

若是你終端提示codecept命令未知,請執行如下命令安裝codeception擴展:bootstrap

composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
composer require --dev yiisoft/yii2-faker:*

 

正常安裝後,再執行codecept run時,若是看到相似以下的報錯:swift

1) Failed to ensure that about works in [1mAboutCept[22m (D:\php\basic\tests\codeception\acceptance\AboutCept.php)
Can't be on page "/index-test.php?r=site%2Fabout":
GuzzleHttp\Exception\ConnectException: cURL error 7: Failed to connect to localhost port 8080: Connection refused

提示在xx端口鏈接拒絕,這裏,咱們須要修改一下配置文件:服務器

  • 修改basic/tests/codeception.yml裏面的config/test_entry_url配置,爲你實際的項目入口地址
  • 修改basic/tests/codeception/acceptance.suite.yml裏面的modules/config/PhpBrowser配置爲你實際的地址

完成後,再執行codecept run,你應該能夠看到終端沒有報錯了。yii2

咱們來看看tests目錄的結構:

複製代碼
webroot/basic/tests
    |--- codeception/
    |        |--- _output/
    |        |--- _pages/
    |        |--- acceptance/
    |        |--- bin/
    |        |--- config/
    |        |--- fixtures/
    |        |--- functional/
    |        |--- templates/
    |        |--- unit
    |        |--- _bootstrap.php
    |        |--- acceptance.suite.yml
    |        |--- functional.suite.yml
    |        |--- unit.suite.yml
    |--- codeception.yml
複製代碼

 

其實,這裏acceptance、functional、unit是Yii2默認爲咱們建立的三個suite,顧名思義,分別用於驗收,功能,單元測試。

而執行codecept run時,會依次將codeception目錄的全部suite運行,故,你能夠經過codecept run suitename的方式制定執行某個suite;同理,能夠執行codecept run suitename testname的方式執行某個test。

你能夠仿照functional,unit,acceptance裏面的例子寫你本身的測試用例。

注:經過腳手架建立的Yii2項目會自動增長gitignore,將vendor中的內容從版本庫中忽略,若是你須要提交,請手動修改gitignore文件。

從已有的Yii2項目開始CodeCeption

對於一個已有的Yii2項目,咱們須要遵循以下幾步來配置CodeCeption。

  • 在項目根目錄執行composer init來初始化composer。
  • 執行以下指令確保codeception的擴展包已經全局安裝
    • composer global require "codeception/codeception=2.0.*"
    • composer global require "codeception/specify=*"
    • composer global require "codeception/verify=*"
    • composer require --dev yiisoft/yii2-faker:*
  • 在項目合適的目錄建立一個codeception目錄做爲codeception的測試代碼目錄
  • 進入codeception目錄,執行codecept bootstrap來初始化生成測試代碼腳手架。
  • 仿照yii2-app-basic,修改codeception.yml
  • 仿照yii2-app-basic,修改codeception/tests/_bootstrap.php文件
  • 仿照yii2-app-basic,修改codeception/tests/*.suite.yml
  • 增長一個codeception/tests/config目錄,以存儲配置文件。仿照yii2-app-basic的形式增長config.php,common.php

具體的配置內容依實際狀況而定,具體能夠參考yii2-app-basic提供的例子。

附:如何基於yii2-app-basic按照module來組織項目代碼

前面所述,經過腳手架建立yii2-app-basic開發環境後,咱們的代碼目錄結構爲:

複製代碼
webroot/basic
    |--- assets/
    |--- commands/
    |--- config/
    |--- controllers/
    |--- mail/
    |--- models/
    |--- runtime/
    |--- tests/
    |--- vendor/
    |--- views/
    |--- web/
    |--- .gitignore
    |--- composer.json
    |--- composer.lock
    ...
複製代碼

 

這個結構是Yii2默認建立的目錄,咱們能夠看到它並無安裝module進行劃分。咱們能夠對其進行調整:

  • 新建一個modules目錄,假設默認的module爲demo
  • 在modules目錄下面新建demo目錄做爲demo模塊代碼存放目錄
  • 將上面的controllers,models,views三個目錄移到demo目錄下面
  • 在demo目錄下新建一個Module.php,新建一個類繼承自[[\yii\base\Module]],代碼見後。
  • 在config目錄下面增長一個modules.php,增長對demo目錄的配置
  • 修改web.php,增長對modules.php的引用
  • 修改index.php,增長@modules的別名
  • 對應調整modules/demo/裏面的namespace

按照以上步驟調整後的路徑以下:

複製代碼
webroot/basic
    |--- assets/
    |--- commands/
    |--- config/
    |--- modules/
    |        |--- demo/
    |        |        |--- controllers/
    |        |        |--- views/
    |        |        |--- models/
    |        |--- ...
    |--- mail/
    |--- runtime/
    |--- tests/
    |--- vendor/
    |--- web/
    |--- .gitignore
    |--- composer.json
    |--- composer.lock
    ...
複製代碼

 

各文件的內容以下:

basic/modules/demo/Module.php

複製代碼
<?php
 /**
  * Module.php
  *
  * @author        fangliang
  * @create_time       2015-06-16
  */

namespace modules\demo;


class Module extends \yii\base\Module
{
    public $layout = "main";
    public $controllerNamespace = 'modules\demo\controllers';

    public function init()
    {
        parent::init();
        //do something init here
    }
} 
複製代碼

 

basic/web/index.php

複製代碼
<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

Yii::setAlias("@modules",dirname(__DIR__) .'/modules' );

(new yii\web\Application($config))->run();
複製代碼

 

basic/config/web.php

複製代碼
<?php

$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '0_wkmOLxql9rlIaqjYNPFL3pYDfLNuLk',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'modules\demo\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'demo/site/error',
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
    ],
    'params' => $params,
    'modules'=> require(__DIR__.'/modules.php'),
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = 'yii\gii\Module';
}

return $config;
複製代碼

 

basic/config/modules.php

複製代碼
<?php

return [
    'demo' =>[
        'class'=>'modules\demo\Module',
    ]
];
複製代碼

 

在完成以上的配置後,基本的配置就完成了。

若是是一個全新的項目,你能夠直接fork個人這個腳手架:Yii2模塊化Web應用腳手架

相關文章
相關標籤/搜索