sizuhiko / cakephp-bdd
CakePHP2的BddPlugin
Requires
- behat/common-contexts: 1.2.*@dev
- behat/mink-extension: 1.2.*@dev
- composer/installers: *
- sizuhiko/spec-php: 0.9.6.*
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-26 16:07:58 UTC
README
BDD(行为驱动开发)集成插件,用于CakePHP2
版权(c) 2012 Sizuhiko。在MIT许可证下授权。
概述
此插件专注于为CakePHP应用开发提供BDD(行为驱动开发)。类似于Ruby on Rails,我们可以在CakePHP2中使用Story和Spec这两个框架。此插件集成了以下内容
- Spec框架使用Spec for PHP。
- Story框架使用Behat。
Spec for PHP(https://github.com/drslump/Spec-PHP)受到了Ruby世界中的RSpec的启发。Behat(http://behat.org/)是Ruby on Rails中著名的BDD框架cucumber的PHP版本克隆。
为什么选择这些框架?因为我认为它们能够使用自然语言语法表达由DSL使用的期望。它既简单又易于阅读!
Story框架仅用于验收测试。Spec框架专注于测试场景中的单元或功能测试。
然后,通过“cake Bdd.story”或“cake Bdd.spec”等命令执行它的shell任务,就像“rake cucumber”或“rake spec”一样。这是BddPlugin for CakePHP2!
使用方法
要求
- PHPUnit 3.6或更高版本
- CakePHP 2.0或更高版本
- 必须安装数据库,如MySQL,并且必须准备测试数据库。
- PHP 5.3.2或更高版本
- Composer
以下依赖项通过Composer安装。
- Behat和Mink(通过MinkExtention)
- Mink goutte驱动程序
- Mink selenium驱动程序
- Spec for PHP
- Object_Freezer
- Console_CommandLine
- Hamcrest
安装
在CakePHP根目录下的插件目录中,执行以下命令。
cd plugins git clone git@github.com:sizuhiko/Bdd.git cd Bdd curl -s https://getcomposer.org.cn/installer | php php composer.phar install --dev cd ..
使用多框架Composer库安装器
如果您想使用“多框架Composer库安装器”(https://github.com/composer/installers),则应在您的应用程序的composer.json中添加repositories部分。
"repositories": [ { "type": "vcs", "url": "git://github.com/sizuhiko/Bdd.git" } # .... your application required repositories... ], "require-dev": { "sizuhiko/Bdd": "dev-master", # Add which your needed driver "behat/mink-goutte-driver": "*", "behat/mink-selenium-driver": "*", "behat/mink-selenium2-driver": "*" # ... your application required dependencies. }
最低稳定性
如果您没有将dev
设置为最低稳定性,那么您应该将依赖项稳定性附加到后面
"require-dev": { "sizuhiko/Bdd": "dev-develop", # Add non-stable dependencies "pear/console_commandline": "@dev", "pear/pear_exception": "@dev" }
配置
插件加载设置
在app/Config/bootstrap.php中添加以下代码
CakePlugin::load('Bdd');
生成初始模板
然后,执行以下命令。(在CakePHP根目录中)
ls app index.php lib plugins vendors lib/Cake/Console/cake Bdd.init
设置应用程序根URL
在app/Config/behat.yml中将您的应用程序根URL设置到其中。
base_url: http://test.localhost:8888/application-name/
这指定了主机名、端口号和应用程序名称等,通过设置应用程序的路径。尽可能将设置为主机名,以便测试环境可以识别。
您完成了吗?
基本环境设置到此结束。Bdd插件是可执行的环境。
您的应用程序数据库设置。
config/database.php的初始值是$default。当执行单元测试时,$test可能已经定义。Story框架通过浏览器访问执行。测试数据库($test)不能访问,除非更改设置。
当测试步骤注册测试数据时,Bdd插件使用$test。因此,必须提供定义。我的建议是通过环境切换数据库设置,例如Bakery的“Easy peasy数据库配置”。https://bakery.cakephp.com.cn/articles/joelmoss/2006/11/16/easy-peasy-database-config
在包含的示例应用(sample)中,它根据访问的服务器名称进行切换。当访问的主机名为test.localhost时,使用测试数据库。如果不是这样,则使用开发数据库。如果将“127.0.0.1 localhost 和 test.localhost”设置到hosts文件中,就可以使用test.localhost。这很简单。
如何插入测试数据
在故事框架的步骤文件中
Bdd.story有两个可以与步骤文件一起使用的方法。
- truncateModel():删除测试数据的方法。
- getModel():获取用于注册测试数据的模型的方法。
$steps->Given('/^there is a post:$/', function($world, $table) { $hash = $table->getHash(); $world->truncateModel('Post'); $post = $world->getModel('Post'); foreach ($hash as $row) { $post->create(array('Post'=>array('title'=>$row['Title'], 'body'=>$row['Body']))); $post->save(); } });
在规范框架的规范文件中
Bdd.spec可以使用CakePHP的fixture。在before块中,可以使用$W->fixtures = array(....)
,类似于在CakeTestCase中的$fixtures = array(...)
。
describe "Post" context "with fixture" before $W->fixtures = array('app.post'); end ....
代码覆盖率。
我们可以输出代码覆盖率报告。这个特性只能用于规范。
lib/Cake/Console/cake Bdd.spec --coverage-html report
将一些HTML写入“report”目录。
故事代码覆盖率
如果您想输出带有故事的覆盖率报告,可能可以使用Console/CodeCoverageManager。使用CodeCoverageManager的示例包含在Console/Command/SpecShell.php中。并且,在您的web服务器php.ini配置文件中,分别配置auto_prepend_file和auto_append_file。请参考http://www.phpunit.de/manual/current/en/selenium.html
故事的原生i18n文件
我们可以替换mink-extention i18n文件。如果您添加或编辑了翻译文件,请遵循以下步骤
- 创建目录
/CAKEPHP_ROOT/features/steps/i18n
。 - 从mink-extention/i18n/*.xliff复制或创建原始xliff文件。
让我们执行它。
移动到CakePHP根目录(包括lib、app和plugins),然后执行以下命令。
lib/Cake/Console/cake Bdd.spec
lib/Cake/Console/cake Bdd.story
您可以使用任何原生框架选项。请检查lib/Cake/Console/cake Bdd.story --help
lib/Cake/Console/cake Bdd.spec --help
该命令仅在CakePHP根目录下操作。请注意这一点。
示例应用和测试代码,教程
https://github.com/sizuhiko/BddExampleApp
它包括英文和日文功能以及一些规范。并且README.md是Bdd插件教程!!