rezzza / alice-extension
Behat 的 Alice 扩展
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
使用此类配置,当您调用以下步骤时,它将加载 默认 固定数据(例如此示例中的 users 和 products)。default_loading 键在这里很重要,如果它定义为 implicit
,则在您使用以下步骤时将隐式加载 默认 固定数据。如果它定义为 explicit
,您必须使用 Given I load "default" fixtures
来加载 默认 固定数据。
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
当然,固定数据只加载一次。
Faker 提供者
一些提供者在 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
-
我想使用这个与 PostgreSQL!
-
您应该提交一个 PR