2016-11-15 2 views
0

ich die folgende Kataloge Struktur haben:Behat 3 + Symfony 3 Kontext mit Namespace funktioniert nicht, wenn ohne Werke

composer.json 
behat.yml 
src 
|--AppBundle 
    |--Features 
     |--example.feature 
     |--Context 
     |--FeatureContext.php 

und die folgenden behat.yml

default: 
    autoload: 
    '': 'src/AppBundle/Features/Context' 
    suites: 
    default: 
     paths: ['src/AppBundle/Features'] 
     contexts: 
     - FeatureContext: 
      session: '@session' 
    # and extensions standard for Symphony 

Und FeatureContext.php enthält

<?php 

//namespace AppBundle\Features\Context; 

use Behat\Behat\Context\Context; 
use Behat\MinkExtension\Context\MinkContext; 

/** 
* Defines application features from the specific context. 
*/ 
class FeatureContext extends MinkContext implements Context 
{ ... } 

Es gibt einen Kommentar Namensraum. Wenn ich behat starte, wird der Kontext korrekt gefunden. Wenn ich Namespace Kommentar- tritt Fehler:

[Behat\Behat\Context\Exception\ContextNotFoundException]
FeatureContext context class not found and can not be used.

wie man es machen zu arbeiten, wenn Namespace in FeatureContext.php unkommentiert ist? Ich weiß nicht viel über PSR-0 und PSR-4, aber wenn das Problem damit verbunden werden kann, füge ich ein Fragment von composer.json.

Ich suche nach Best Practices der Codierung, also, wenn ich etwas auf schlechte Weise mache, stimme ich für geeignete Anregung.

  • Ich scheine ich Namespace in FeatureContext.php haben sollte, sollte ich nicht?
  • Ich scheine ich sollte nicht verwenden PSR-0 in composer.json, sollte ich?

Antwort

2

Schauen Sie sich das folgende Beispiel an. Das vollständige Beispiel finden Sie hier: http://www.inanzzz.com/index.php/post/l41o/testing-a-basic-auth-symfony-api-with-behat3 Hier finden Sie weitere Beispiele: http://www.inanzzz.com/index.php/posts/behat

Hinweis 1: Sie können auf die session in Kontextdateien direkt zugreifen, so dass Sie sie nicht injizieren müssen. Möglicherweise müssen Sie implements KernelAwareContext oder implements KernelAwareInterface oder implements ContainerAwareInterface verwenden. Schau dir einfach die obigen Blogposts an.

Hinweis 2: Sie brauchen autoload-dev in composer.sjon überhaupt nicht. Werde es los.

composer.json

Hinweis: Verwenden Sie neue Versionen!

{ 
    "require-dev": { 
     "behat/behat": "3.0.15", 
     "behat/symfony2-extension": "2.1.0", 
     "behat/mink": "1.7.0", 
     "behat/mink-extension": "2.1.0", 
     "behat/mink-browserkit-driver": "1.3.0" 
    }, 
} 

behat.yml

default: 
    extensions: 
     Behat\Symfony2Extension: ~ 
     Behat\MinkExtension: 
      base_url: http://your_local_app_domain.com/app_test.php/ 
      sessions: 
       symfony2: 
        symfony2: ~ 
    suites: 
     api: 
      type: symfony_bundle 
      bundle: ApplicationApiBundle 
      mink_session: symfony2 
      contexts: 
       - Application\ApiBundle\Features\Context\FeatureContext: 
        param: 'whatever' 

FeatureContext.php

namespace Application\ApiBundle\Features\Context; 

use Behat\MinkExtension\Context\MinkContext; 

class FeatureContext extends MinkContext 
{ 
    private $param; 

    public function __construct($param) 
    { 
     $this->param = $param; 
    } 

    ...... 
} 

-Test

$ bin/behat --suite=api @ApplicationApiBundle/YourFeature.feature