vincentchalamon/api-extension

此包已被 弃用 且不再维护。未建议替代包。

API Platform 的 Behat 扩展

1.0.0-beta.4 2018-11-14 22:53 UTC

This package is auto-updated.

Last update: 2020-06-02 09:51:43 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

此 Behat 扩展需要以下扩展,请检查其文档以了解安装和用法

此扩展仅作为编写某些步骤的快捷方式,它不会替换您的自定义步骤。 例如,如果您想测试更新用户会更新其密码,您仍然需要添加一个自定义步骤,例如 并且用户密码已成功更新

安装

composer require --dev vincentchalamon/api-extension

在 Behat 配置中声明所需扩展

# behat.yml.dist
default:
    # ...
    suites:
        default:
            contexts:
                - Behat\MinkExtension\Context\MinkContext
                - Behatch\Context\RestContext
                - Behatch\Context\JsonContext
                - ApiExtension\Context\ApiContext
                - ApiExtension\Context\FixturesContext
    extensions:
        Behat\Symfony2Extension:
            kernel:
                bootstrap: features/bootstrap/bootstrap.php
                class: App\Kernel
        Behat\MinkExtension:
            base_url: 'http://www.example.com/'
            sessions:
                default:
                    symfony2: ~
        Behatch\Extension: ~
        # ...
        ApiExtension: ~

使用自定义猜解器为 populator

# behat.yml.dist
default:
    # ...
    extensions:
        # ...
        ApiExtension:
            guessers:
              - App\Populator\Guesser\AcustomGuesser
              - App\Populator\Guesser\AnotherCustomGuesser

与 Symfony FrameworkBundle < 4.1 的使用

在 Symfony FrameworkBundle < 4.1 中运行时,需要覆盖一些私有服务

# config/services_test.yaml

# Hack for Behat: allow to inject some private services
services:
    test.property_info:
        parent: property_info
        public: true
    test.api_platform.metadata.resource.metadata_factory.annotation:
        parent: api_platform.metadata.resource.metadata_factory.annotation
        public: true
    test.api_platform.iri_converter:
        parent: api_platform.iri_converter
        public: true
    test.annotation_reader:
        parent: annotation_reader
        public: true
    test.router:
        parent: router
        public: true
# behat.yml.dist
default:
    # ...
    extensions:
        # ...
        ApiExtension:
            services:
                metadataFactory: '@test.api_platform.metadata.resource.metadata_factory.annotation'
                iriConverter: '@test.api_platform.iri_converter'
                registry: '@doctrine'
                propertyInfo: '@test.property_info'
                annotationReader: '@test.annotation_reader'
                router: '@test.router'

使用

FixturesContext 提供以下步骤

  • 以下 <name>
  • 有 <nb> <name>
  • 有一个 <name>
  • 有一个 <name>
  • 有 <nb> <name>
  • 有 <name>
  • 有 <nb> <name> 且

ApiContext 提供以下步骤

  • 我得到一个 <name> 列表
  • 我得到一个通过 <filter> 过滤的 <name> 列表
  • 我得到一个按 <filter> 排序的 <name> 列表
  • 我创建一个 <name>
  • 我创建一个 <name>
  • 我使用组 <serialization-group> 创建一个 <name>
  • 我使用组 <serialization-groups> 创建一个 <name>
  • 我使用组 <serialization-group> 创建一个 <name>
  • 我使用组 <serialization-groups> 创建一个 <name>
  • 我创建一个带有 <name> 的 <name>
  • 我创建一个带有 <name> 的 <name>
  • 我使用组 <serialization-group> 并带有 <name> 创建一个 <name>
  • 我使用组 <serialization-groups> 并带有 <name> 创建一个 <name>
  • 我使用组 <serialization-group> 并带有 <name> 创建一个 <name>
  • 我使用组 <serialization-groups> 并带有 <name> 创建一个 <name>
  • 我得到一个 <name>
  • 我得到一个 <name>
  • 我得到 <name> <value>
  • 我删除一个 <name>
  • 我删除一个 <name>
  • 我删除 <name> <value>
  • 我更新一个 <name>
  • 我更新一个 <name>
  • 我更新 <name> <value>
  • 我更新一个带有 <name> 的 <name>
  • 我更新一个带有 <name> 的 <name>
  • 我更新 <name> <value> 并带有
  • 请求无效
  • <name> 未找到
  • 方法不允许
  • 我看到一个 <name>
  • 我看到一个 <name>
  • 我看到一个 <name> 列表
  • 我看到 <nb> <name> 列表
  • 我没有看到任何 <name>
  • 打印 <name> 列表的 JSON 模式
  • 打印 <name> 项目的 JSON 模式
  • 打印最后的 JSON 请求

示例

Feature: Using API-Platform, I can get, create, update & delete beers.

  Scenario: I can get a list of beers
    Given there are beers
    When I get a list of beers
    Then I see a list of beers

  Scenario: I can get a list of beers filtered by name
    Given there are beers
    When I get a list of beers filtered by name=Chouffe
    Then I don't see any beer

  Scenario: I can create a beer
    When I create a beer
    Then I see a beer

  Scenario: I can create a beer
    When I create a beer with:
      | name    |
      | Chouffe |
    Then I see a beer

  Scenario: I can update a beer
    Given there is a beer
    When I update a beer
    Then I see a beer

  Scenario: I can update a beer and fill its new name
    Given there is a beer
    When I update a beer with:
      | name    |
      | Chouffe |
    Then I see a beer

  Scenario: I can update a beer by its name
    Given the following beer:
      | name    |
      | Chouffe |
    When I update the beer Chouffe
    Then I see a beer

  Scenario: I can update a beer by its name and fill its new name
    Given the following beer:
      | name    |
      | Chouffe |
    When I update the beer Chouffe with:
      | name |
      | Kwak |
    Then I see a beer

  Scenario: I can get a beer
    Given there is a beer
    When I get a beer
    Then I see a beer

  Scenario: I can get a beer by its name
    Given the following beer:
      | name    |
      | Chouffe |
    When I get the beer Chouffe
    Then I see a beer

  Scenario: I cannot get a non-existing beer
    When I get a beer
    Then the beer is not found

  Scenario: I can delete a beer
    Given there is a beer
    When I delete a beer
    Then the beer has been successfully deleted

  Scenario: I can delete a beer by its name
    Given the following beer:
      | name    |
      | Chouffe |
    When I delete the beer Chouffe
    Then the beer has been successfully deleted

添加 faker 提供程序

要使用来自 fzaninotto/Faker 的自定义 faker 提供器,请按照以下方式更新您的 Behat 配置:

# behat.yml.dist
default:
    # ...
    extensions:
        # ...
        ApiExtension:
            # ...
            providers:
                - App\Faker\Provider\MiscellaneousProvider