rezzza/alice-extension

Behat 的 Alice 扩展

安装次数: 37,331

依赖项: 0

建议者: 0

安全: 0

星标: 32

关注者: 7

分支: 13

开放性问题: 4

类型:behat-extension

v3.0.1 2019-06-20 08:31 UTC

README

AliceBehat 一起工作。

您可以通过 yaml 文件和 Behat 步骤导入固定数据。

版本

  • 1.0.x 版本,适用于 Behat 3.x: Build Status
  • 0.1.x 版本,适用于 Behat 2.5.x

安装

通过 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

使用此类配置,当您调用以下步骤时,它将加载 默认 固定数据(例如此示例中的 usersproducts)。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