rezzza / rest-api-behat-extension
Requires
- php: >=5.3.2
- behat/behat: ~3.0
- behat/symfony2-extension: ~2.0
- doctrine/data-fixtures: 2.0.*@dev
- nelmio/alice: ~2.1
Requires (Dev)
- atoum/atoum: ~2.0
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: ~2.2,>=2.2.3
- symfony/symfony: ~2.3|~3.0
Suggests
- doctrine/orm: To use ORM adapter
- friendsofsymfony/elastica-bundle: To use ElasticSearch adapter
README
您可以通过yaml文件和Behat步骤导入测试数据。
版本
安装
通过Composer
$ composer require --dev "rezzza/alice-extension:1.0.*@dev"
配置您的behat.yml
default: extensions: Rezzza\AliceExtension\Extension: fixtures: /path/to/your/fixtures.yml lifetime: (scenario|feature) faker: locale: en_US #default providers: []
要编写您的fixtures.yml
,请参阅Alice文档
此扩展需要Symfony2Extension
才能工作。请参阅其文档
用法
在您的Behat配置中,您可以为所需的测试套件激活AliceContext
default: suites: default: contexts: - Rezzza\AliceExtension\Context\AliceContext
因此,您现在可以在特征中编写
Feature: Test My feature Background: Write fixtures Given I load "Vendor\My\Entity" fixtures where column "key" is the key: | key | id | name | | fixture1 | 1 | jean | | fixture2 | 2 | marc |
如果您使用yaml文件,您应该考虑使用模板继承将默认值放入其中。
并使用内联测试数据覆盖您需要的值。
特定实体的钩子
有时您需要为持久化对象应用特定操作。您可以通过此扩展包含的Symfony2 Bundle来完成此操作。
激活包
<?php /***/ class AppKernel extends Kernel { public function registerBundles() { $bundles = array( /***/ new Rezzza\AliceExtension\Symfony\Bundle\RezzzaAliceExtensionBundle() /***/ ); } } ?>
然后,在您的Symfony2应用程序中,您将能够通过服务构建一些Alice处理器。它应该扩展Nelmio\Alice\ProcessorInterface
并通过标签alice_extension.processor
注册。
适配器
目前我们支持
- DoctrineORM
- ElasticSearch(通过FOSElasticaBundle)
default: extensions: Rezzza\AliceExtension\Extension: adapters: elastica: ~ orm: ~
对于ElasticSearch,我们应该使用mapping
配置来指示alice应使用哪种ElasticSearch类型来持久化您的模式
default: extensions: Rezzza\AliceExtension\Extension: adapters: elastica: index_service: fos_elastica.index.name_of_your_index mapping: myType: My\Fully\Model orm: ~
然后在您的特征中,您应该使用标签来指定alice应使用哪种适配器
@alice:elastica Feature: Test My feature Background: Write fixtures Given I load "Vendor\My\Entity" fixtures where column "key" is the key: | key | id | name | | fixture1 | 1 | jean | | fixture2 | 2 | marc |
高级测试数据
可以通过配置管理测试数据。
default: extensions: Rezzza\AliceExtension\Extension: default_loading: implicit fixtures: default: [users, products] # could be scalar if you want only one => users key_paths: users: /src/path/to/your/fixtures.yml products: /src/path/to/your/fixtures.yml
在这种配置下,当你调用下面的步骤时,它将加载默认的固定值(在这个例子中是用户和产品)。这里的default_loading键非常重要,如果将其定义为implicit
,则在使用下面的步骤时将隐式加载默认的固定值。如果定义为explicit
,你必须使用Given 我加载 "default" 固定值
来加载默认的固定值。
Given I load "Acme\Bundle\Entity\User" fixtures where column "key" is the key:
| key | emailAddress | password |
| user1 (extends user) | chuck@norris.com | password |
你可以手动加载固定值。
Given I load "default" fixtures # will load users AND products
Given I load "users" fixtures # will load users
Given I load "products" fixtures # will load products
当然,固定值只会加载一次。
固定值提供者
一些提供者在AliceExtension上可用。
- NullProvider:
<null>
- FixedDateTimeProvider:
<fixedDateTime("+1 hour")>
你可以在behat.yml配置中轻松添加它们(或你自己的)。
default: extensions: Rezzza\AliceExtension\Extension: ..... faker: locale: en_US #default providers: - \Rezzza\AliceExtension\Providers\NullProvider - \Rezzza\AliceExtension\Providers\FixedDateTimeProvider - \Acme\Providers\YourOwnProvider
生命周期
有两种生命周期选项。
- 场景:在每个场景之后重置固定值。你必须使用背景步骤来描述你的固定值。
- 功能:在每个功能之后重置固定值。你必须使用场景步骤来描述你的固定值。
常见问题解答
-
我想用这个与Doctrine ODM一起使用!
-
你应该做一个PR(Pull Request)。
-
我想用这个与PostgreSQL一起使用!
-
你应该做一个PR(Pull Request)。