Behat не вызывает расширенные методы mink

Я сказал себе: «Я должен научиться bdd?» И я попробовал комбинацию Symfony2/Behat/Mink.

Ну, я писал код, как писал в учебниках. Но все версии behat в документах/учебниках ниже версии 3. Я хочу изучить behat3. Я зайду на официальную страничку и почитаю.

Все в порядке, но почему-то приложение cli не может вызывать расширенные методы класса mink. Я помещу свои коды ниже. Как я запускаю приложение behat3 с помощью методов минка.

особенности/бутстрап/FeatureContext.php

<?php

use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;

/**
 * Defines application features from the specific context.
 */
class FeatureContext  extends \Behat\MinkExtension\Context\MinkContext implements Context, SnippetAcceptingContext
{

}

особенности/home.feature

Feature: Home
  I want to see homepage
  As a anonym user
  Scenario:
    Given |I am on |the homepage
    Then |I should see text matching "Sektör"

behat.yml

default:
  extensions:
    Behat\Symfony2Extension: ~
    Behat\MinkExtension:
      sessions:
        default:
          symfony2: ~
        selenium2:
          selenium2: ~
      base_url: http://site.dev

композитор.json

    "behat/behat": "~3.0",
    "behat/mink-extension": "~2.0@dev",
    "behat/mink-goutte-driver": "~1.0",
    "behat/mink-selenium2-driver": "~1.1",
    "behat/symfony2-extension": "*"

Результат:

Feature: Home
  I want to see homepage
  As a anonym user

  Scenario:                                   # features/home.feature:4
    Given |I am on |the homepage
    Then |I should see text matching "Sektör"

1 scenario (1 undefined)
2 steps (2 undefined)
0m0.12s (25.80Mb)

--- FeatureContext has missing steps. Define them with these snippets:

    /**
     * @Given |I am on |the homepage
     */
    public function iAmOnTheHomepage()
    {
        throw new PendingException();
    }

    /**
     * @Then |I should see text matching :arg1
     */
    public function iShouldSeeTextMatching($arg1)
    {
        throw new PendingException();
    }

person delirehberi    schedule 06.08.2015    source источник


Ответы (1)


Это поможет вам начать с версии 3. Найден весь пример здесь и другие примеры в здесь, Inc. версия 2.

composer.json

{
    "require-dev": {
        "behat/behat" : "3.0.15",
        "behat/symfony2-extension" : "2.0.0",
        "behat/mink": "1.6.1",
        "behat/mink-extension": "2.0.1",
        "behat/mink-browserkit-driver": "1.2.0",
        "behat/mink-goutte-driver": "1.1.0",
        "behat/mink-selenium2-driver": "1.2.0"
    }
}

behat.yml

default:
    extensions:
        Behat\Symfony2Extension: ~
        Behat\MinkExtension:
            base_url: http://football.local/app_test.php
            browser_name: firefox
            sessions:
                goutte: # fast, CLI, browser, no javascript support
                    goutte: ~
                selenium2: # fast, CLI, opens up a browser
                    selenium2: ~
                symfony2: # very fast, CLI, no browser
                    symfony2: ~
    suites:
        backend:
            type: symfony_bundle
            bundle: ApplicationBackendBundle
            mink_session: symfony2
            contexts:
                - Application\BackendBundle\Features\Context\FeatureContext:
                    param1: hello
                    param2: world

FeatureContext.php

namespace Application\BackendBundle\Features\Context;

use Behat\MinkExtension\Context\MinkContext;
use Behat\Symfony2Extension\Context\KernelAwareContext;
use Symfony\Component\HttpKernel\KernelInterface;

class FeatureContext extends MinkContext implements KernelAwareContext
{
    private $kernel;
    private $param1;
    private $param2;

    public function __construct($param1, $param2)
    {
        $this->param1 = $param1;
        $this->param2 = $param2;
    }

    public function setKernel(KernelInterface $kernelInterface)
    {
        $this->kernel = $kernelInterface;
    }

    /**
     * @Given /^I can access service container$/
     */
    public function iCanAccessServiceContainer()
    {
        $container = $this->kernel->getContainer();
        echo $container->getParameter('secret');
    }
}

Пример функции

# Backend
Feature: Dummy feature

  Scenario: Home url
    Given I am on "/backend"
    Then I should see "Welcome to Application backend!"
    And I can access service container

# Frontend
Feature: Dummy feature

  Scenario: Home url
    Given I am on "/"
    Then I should see "Welcome to Application frontend!"
    And I can access service container

Выполнить

bin/behat --suite=backend

Feature: Dummy feature

  Scenario: Home url
    Given I am on "/backend"
    Then I should see "Welcome to Application backend!"
    And I can access service container
      │ ThisTokenIsNotSoSecretChangeIt

1 scenario (1 passed)
3 steps (3 passed)
0m0.98s (28.17Mb)
person BentCoder    schedule 07.08.2015
comment
Спасибо @BentCoder. Оно работает. Но моя ошибка - это конвейер :(. Меня обманула функция автозаполнения phpstorm. - person delirehberi; 08.08.2015
comment
@aybarscengaver — цитируемый сайт в открытом доступе говорит на вашем родном языке, так что я думаю, вы захотите воспользуйтесь этим для BDD и, возможно, для других. - person BentCoder; 08.08.2015