Yii 框架提供了初级(Basic)和高级(Advanced)应用程序模板,这两个模板都有简单的 codeception 测试,因此,如果你想开始一个 codeception 测试,你必须下载这两个模板的一个去开始你的项目。
Yii Basic
当你创建一个 Basic 模板的项目,你将会看到 tests 目录和 codeception.yml 配置文件,从一开始就有功能和单元测试套件。
在终端执行下面的指令来运行测试:
./vendor/bin/codecept run
单元测试(Unit Test)
单元测试位于 tests/unit 目录,支持所有类型的单元和整合测试。
每一个测试用例都继承于 Codeception\Test\Unit class(标准的codeception格式的单元测试类),在Yii中开发完全单独的单元测试是相当困难的,所以在每个测试用例之前都会引导一个应用程序,在配置文件tests/unit.suite.yml中启用Yii2模块:
modules:
enabled:
- Yii2:
part: [orm, email]
这个模块为测试用例启动Yii应用程序和为简单测试提供额外的帮助方法,它只有orm和email部分,以便排除功能测试所需的方法。
在测试用例里面通过$this->tester class你可以使用Yii2 module的方法,所以如果你启用了orm和email,那么你就可以在这里调用他的方法:
<?php
// insert records in database
$this->tester->haveRecord('app/model/User', ['username' => 'davert']);
// check records in database
$this->tester->seeRecord('app/model/User', ['username' => 'davert']);
// test email was sent
$this->tester->seeEmailIsSent();
// get a last sent emails
$this->tester->grabLastSentEmail();
如果你启用了fixtures,你可以在你的测试中用这个方法去加载使用fixtures:
<?php
// load fixtures
$this->tester->haveFixtures([
'user' => [
'class' => UserFixture::className(),
// fixture data located in tests/_data/user.php
'dataFile' => codecept_data_dir() . 'user.php'
]
]);
// get first user from fixtures
$this->tester->grabFixture('user', 0);
如果你在测试中启动了Yii2模块,你就可以放心地调用Yii::$app,因为应用程序会在测试之后被初始化和清理。如果你想在你的测试用例添加你的帮助方法或者是定制的断言,你可以不继承Codeception\Test\Unit,而是写你自己单独的帮助方法。如何写 更多的单元测试教程
功能测试(Functional Tests)
当我们测试web程序的真正特性的时候,我们不能仅仅使用单元测试,还有你想去测试程序如何处理接收数据和提供什么样的返回数据,数据如何保存导数据库等等,你可以使用功能测试去测试程序在一个仿真环境,服务器或者浏览器。功能测试的编写比单元测试更简单,它用一个简单的DSL来描述交互场景,所以你不需要直接处理应用程序,而是从用户的角度来描述操作:
<?php
$I->amOnPage(['site/contact']);
$I->submitForm('#contact-form', []);
$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');
这种方式不仅可以测试 ContactForm ,还可以测试到用户看到的应用的真实输出。Codeception 为测试提供了像amOnPage, submitForm, see 这样的标准操作,Yii2模块提供特殊的方法像 amLoggedInAs (快速验证), haveRecord, seeRecord, seeEmailIsSent 等等。查看更多
功能测试应该写在Cest文件中,这是一个由场景驱动的Codeception测试格式。你可以通过下面的命令轻松创建一个新的测试:
./vendor/bin/codecept g:cest functional MyNewScenarioCest
注意:Function 测试非常强大而且简单,强烈推荐使用在任何Yii程序。更多参见Function 测试教程
API 测试
待续……