n-educatio / testbundle
示例规格和端到端测试框架
Requires
- php: >=5.3.3
- behat/mink-extension: ~1.2
- behat/mink-goutte-driver: *
- behat/mink-selenium2-driver: *
- behat/symfony2-extension: *
- doctrine/data-fixtures: dev-master
- doctrine/doctrine-fixtures-bundle: dev-master
- doctrine/orm: >=2.2.3,<2.4-dev
- mockery/mockery: >=0.7.2
- symfony/framework-bundle: ~2.3
- symfony/symfony: 2.3.*
Requires (Dev)
- phpmd/phpmd: ~1.5
- phpunit/phpunit: 3.7.*
- zerkalica/phpcs: dev-master
This package is not auto-updated.
Last update: 2024-09-28 15:00:32 UTC
README
该包优化了Symfonowskiego加载 fixtures 的机制。该包完全独立,并且100%覆盖单元测试。此外,TestBundle 引入了新的规则,即使用所谓的“句柄”来引用页面上的特定元素。
安装
修改 composer.json 文件
"repositories": [ { "type": "package", "package": { "name": "n-educatio/testbundle", "version": "dev-master", "source": { "type": "git", "url": "git@github.com:n-educatio/TestBundle.git", "reference": "master" } } } ], "require": { "n-educatio/testbundle": "dev-master" }, "autoload": { "psr-0": { "Neducatio\\TestBundle": "vendor/n-educatio/testbundle/src" } }
然后安装缺失的 vendors
php composer.phar install
运行 TestBundle 包的测试
ant test - phpunit 和 behat 测试
fixtures 使用示例
示例可在此查看 此处
句柄使用示例
语言更改测试示例
上下文
class LanguageContext extends BaseSubContext { /** * Change website language * * @param string $language New langauge * * @When /^I change language to ([^"]*)$/ */ public function changeLanguage($language) { $this->setPage(LanguagePanel::NAME); $this->getPage()->changeLanguage($language); } }
在我们的例子中,PageObject 可以是页面上的任何元素,例如菜单、语言面板等。需要注意的是 $proofSelector 字段,它告知 PageObject 的作用范围。
class LanguagePanel extends BasePageObject { const NAME = __CLASS__; protected $proofSelector = '.t_languages'; /** * Changes language * * @param string $language Language */ public function changeLanguage($language) { //Nasze uchwyty w tym przypadku to //t_language_polish //t_language_english $this->get('language_' . $language)->click(); } }
注意,get() 方法现在获取的是 id 句柄,它必须在 html 中作为 t_uchwyt 固定。
分人/等
我们的目标是只加载启动测试所需的特定 fixtures,因此每个 fixtures 都被声明为具体的“人”、“课程”、“评论”等,它们具有独特的属性和属性。例如,在我们的系统中存在两个测试用户:Julia Lazy(已在该服务中注册的 persona)和 Amy Fresh(尚未与应用程序关联,但拥有自己的电子邮件地址、名称等。我们创建它们的方式如下:我们的 Amy Fresh
class LoadAmyFreshUserData extends LoadActorUserData { const NAME = __CLASS__; protected $order = 100; protected $userData = array( 'AmyFresh' => array( "username" => "amy.fresh@example.com", "description" => "Teacher that visits the app for the first time and wants to give it a try", "roles" => "ROLE_USER", "firstname" => "Amy", "lastname" => "Fresh", "registered" => false, ), ); }
以及 Julia Lazy
class LoadJuliaLazyUserData extends LoadActorUserData { const NAME = __CLASS__; protected $order = 101; protected $userData = array( 'JuliaLazy' => array( "username" => "julia.lazy@example.com", "description" => "User that is only registered in the system", "roles" => "ROLE_USER", "firstname" => "Julia", "lastname" => "Lazy", "registered" => true, ), ); }
在这种情况下,这两个 persona 都必须继承自 LoadActorUserData 类。显然,每种类型的 persona 都将有一个类似构建的类,该类是该类型 persona 的继承类。
依赖
###添加现在让我们来看看 TestBundle 的核心功能。假设我们想在 fixtures 中添加某些依赖关系。我们以非常简单的方式做到这一点。在依赖于类 Fixture B 的类 Fixture A 中添加以下简短条目
protected $dependentClasses = array( B::NAME, );
现在,每次我们尝试加载 Fixture A 时,TestBundle 都会读取依赖的 Fixture B。
###加载现在是最后一步,即加载 fixtures。为了做到这一点,需要在上下文方法中添加以下代码
public function mojaMetodaKontekstowa() { $this->loadFixtures(array( KLASA_Z_MOIM_PORZADANYM_FIXTUREM::NAME )); // Dalej robie coś tam z Fixturesami // Dla przykładu: $this->getReference('mojaReferencja')->jakasMetoda(); }