2016-04-13 5 views
2

Ich habe solche behat.ymlBehat 3.1 mehrere Kontexte, zweite Kontextklasse nicht

default: 
    autoload: 
    #'': %paths.base%/tests/AppBundle/features/user_registration/bootstrap 
    #'': %paths.base%/tests/AppBundle/features/user_login/bootstrap 
    [ %paths.base%/tests/AppBundle/features/user_registration/bootstrap, %paths.base%/tests/AppBundle/features/user_login/bootstrap ] 
    formatters: 
     progress: ~ 
    suites: 
    app_features: 
     #paths: 
     #features: %paths.base%/tests/AppBundle/features 
     paths: [ %paths.base%//tests/AppBundle/features ] 
     contexts: 
     #- tests\AppBundle\user_registration\UserRegistrationContext 
     - UserRegistrationContext 
     - UserLoginContext 

    #suites: 
    # default: 
    #  contexts: 
    #   - FeatureContext: 
     #   session: '@session' 
    extensions: 
    Behat\Symfony2Extension: ~ 

Auch mit dieser Ordnerstruktur gefunden:

enter image description here

Mit UserRegistrationContext Klasse its ok, es wirft keine Fehler. Dann habe ich UserLoginContext hinzugefügt und kann es nicht finden.

Ich verwende "behat/behat": "^ 3.1" in composer.json.

Die Datei behat.yml befindet sich auf derselben Ebene wie das Verzeichnis "tests".

UserLoginContext sieht wie folgt aus:

<?php 

use Behat\Behat\Tester\Exception\PendingException; 
use Behat\Behat\Context\Context; 
use Behat\Behat\Context\SnippetAcceptingContext; 
use Behat\Gherkin\Node\PyStringNode; 
use Behat\Gherkin\Node\TableNode; 

use Behat\Mink\Driver\GoutteDriver; 
use Behat\Mink\Session; 


use AppBundle\Controller\UserController; 


/** 
* Defines application features from the specific context. 
*/ 
class UserLoginContext implements Context, SnippetAcceptingContext 
{ 

    private $session; 

    /** 
    * Initializes context. 
    * 
    * Every scenario gets its own context instance. 
    * You can also pass arbitrary arguments to the 
    * context constructor through behat.yml. 
    */ 
    public function __construct() 
    { 
     // Choose a Mink driver. More about it in later chapters. 
     $driver = new GoutteDriver(); 
     $this->session = new Session($driver); 
    } 

} 

Warum die UserLoginContext nicht gefunden wird?

aktualisieren

Ich habe bemerkt, dass, wenn ich so tun - ein Kontext verlassen, dann wird UserLoginContext gefunden:

default: 
    autoload: 
    #'': %paths.base%/tests/AppBundle/features/user_registration/bootstrap 
    '': %paths.base%/tests/AppBundle/features/user_login/bootstrap 
    #[ %paths.base%/tests/AppBundle/features/user_registration/bootstrap, %paths.base%/tests/AppBundle/features/user_login/bootstrap ] 
    formatters: 
     progress: ~ 
    suites: 
    app_features: 
     #paths: 
     #features: %paths.base%/tests/AppBundle/features 
     paths: [ %paths.base%//tests/AppBundle/features ] 
     contexts: 
     #- tests\AppBundle\user_registration\UserRegistrationContext 
     #- UserRegistrationContext 
     - UserLoginContext 

    #suites: 
    # default: 
    #  contexts: 
    #   - FeatureContext: 
     #   session: '@session' 
    extensions: 
    Behat\Symfony2Extension: ~ 

aktualisieren

temporäre Lösung, die ich gefunden - erstellen ein neues Profil für jeden Kontext Aber ich denke, es ist nicht, wie es sein sollte, aber noch zeigen, wie ich es getan habe:

user_login: 
    autoload: 
    '': %paths.base%/tests/AppBundle/features/user_login/bootstrap 
    formatters: 
     progress: ~ 
    suites: 
    app_features: 
     paths: [ %paths.base%//tests/AppBundle/features ] 
     contexts: 
     - UserLoginContext 
    extensions: 
    Behat\Symfony2Extension: ~ 

Und dann laufen mit --profile Parameter:

sudo vendor/behat/behat/bin/behat --profile user_login 

Das kleine Problem ist, dass, wenn ich will Ich möchte alle Tests ausführen und viele Befehle ausführen. Auch Config Wiederholung. Ich warte immer noch auf eine bessere Lösung.

Antwort

4

Hier bemerkte ich einen kleinen Text, der ein wenig half.

http://docs.behat.org/en/v3.0/guides/6.profiles.html

Mit behat.yml automatisch zu laden für PSR-0 nur erlauben. Sie können auch Verwendung composer.json automatisch zu laden, die auch

für PSR-4

Schande für Behat erlauben - sie würden wirklich brauchen, um mehr darüber zu schreiben, neue Benutzer verursachen würde nicht verstehen, wie man verwendet es zusammen mit composer.json.

Was ich getan habe:

  • hinzugefügt Namespace für die UserLoginContext Klasse gleiche wie Ordnerstruktur

    namespace Tests\AppBundle\features\user_login\bootstrap;

  • hat dieses Namespace Béhat.yml in der Nähe von Kontexten:

.

# for each context class - new profile. 

default: 
    autoload: 
    '': %paths.base%/tests/AppBundle/features/user_registration/bootstrap 
    formatters: 
     progress: ~ 
    suites: 
    app_features: 
     #paths: 
     #features: %paths.base%/tests/AppBundle/features 
     paths: [ %paths.base%//tests/AppBundle/features ] 
     contexts: 

     - UserRegistrationContext 
     - Tests\AppBundle\features\user_login\bootstrap\UserLoginContext 

    #suites: 
    # default: 
    #  contexts: 
    #   - FeatureContext: 
     #   session: '@session' 
    extensions: 
    Behat\Symfony2Extension: ~ 

Auch diejenigen, die nicht in ihre composer.json, müssen diese hinzuzufügen:

"autoload-dev": { 
     "psr-4": { 
      "Tests\\": "tests/" 
     } 
    }, 
  • Ran

    composer dump-autoload -o

Ich bin glücklich, dass Ich habe Erfahrung mit PSR-4 und co achte die Lösung und habe Zeit zum Nachdenken und Experimentieren.