Behat + Symfony2MockerExtension:Session无法访问客户端容器

时间:2014-02-27 10:54:25

标签: behat

我的作曲家:

"require-dev": {
    "polishsymfonycommunity/symfony2-mocker-extension": "*",
    "behat/gherkin" : "~2.2.9",
    "behat/behat": "v2.4.6",
    "behat/symfony2-extension": "*",
    "behat/mink-extension": "*",
    "behat/mink-goutte-driver": "*",
    "behat/mink-selenium2-driver": "*",
    "phpunit/phpunit": "3.7.29"
},

我的专辑:

Feature: Submitting contact request form
  Scenario: Submitting the form
    And CRM API is available
    Then the contact request should be sent to the CRM

Behat的错误:

Feature: Submitting contact request form
  Scenario: Submitting the form
    And CRM API is available
      Session has no access to client container
    Then the contact request should be sent to the CRM

我在mi app / AppKernel()

中添加了getContainerBaseClass
/**
 * @return string
 */
protected function getContainerBaseClass()
{
    if ('test' == $this->environment) {
        return '\PSS\SymfonyMockerContainer\DependencyInjection\MockerContainer';
    }

    return parent::getContainerBaseClass();
}

我的FeatureContext中的新句子:

class GeeftyContext extends MinkContext
    implements KernelAwareInterface, ServiceMockerAwareInterface
{
    /**
     * @var ServiceMocker $mocker
     */
    private $mocker = null;

    /**
     * @param ServiceMocker $mocker
     * @return null|void
     */
    public function setServiceMocker(ServiceMocker $mocker)
    {
        $this->mocker = $mocker;
    }

    /**
     * @Given /^CRM API is available$/
     */
    public function crmApiIsAvailable()
    {
        $this->mocker->mockService(
            'my_service',
            'Acme\Bundle\My\ServiceClass'
        )->shouldReceive('method')->once()->andReturn(true);
    }

    /**
     * @Then /^the contact request should be sent to the CRM$/
     */
    public function theContactRequestShouldBeSentToTheCrm()
    {
        throw new PendingException();
    }
}

1 个答案:

答案 0 :(得分:0)

Symfony Mocker Extension仅适用于Symfony2 mink驱动程序。我猜你正在尝试将其与其他驱动程序一起使用。

在技术上不可能将它与Symfony2以外的驱动程序一起使用。当使用selenium2或goutte等驱动程序时,请求将在一个单独的进程中处理(对于Symfony2驱动程序,它是相同的进程)。

异常消息is a bit missleading。我鼓励您向the project发送PR以改进它。

编辑:如Symfony2MockerExtension#5中所述,该扩展程序仅适用于symfony2会话。您可以将其设置为默认值,如下例所示,或使用@mink:symfony2注释功能/方案。

default:
  context:
    class: 'Acme\DemoBundle\Features\Context\FeatureContext'
  extensions:
    PSS\Behat\Symfony2MockerExtension\Extension: ~
    Behat\Symfony2Extension\Extension:
    Behat\MinkExtension\Extension:
      default_session: symfony2
      show_cmd:  open %s
      base_url:  'http://my.web/site/'
      selenium2: ~
      goutte:    ~