2016-09-21 2 views
0

Hier ist meine Funktion Datei Eigenschaft ist: Als Besucher sollte ich in der Lage sein, die HomepageBehat Fehler - Schritt bereits definiert

@javascript @program 
    Scenario: View first page 
    When I fill in the following: 
     | username | myusername | 
     | password | mypass | 
    And press "Login" 
    Then I should see "Dashboard" 
    Then I go to "/programs/list" 

Mein composer.json zu laden ist, wie folgend:

{ 
    "require": { 
     "behat/mink-extension": "^2.2", 
     "behat/mink-goutte-driver": "^1.2", 
     "behat/mink-selenium2-driver": "^1.3" 
    } 
} 

meine behat.yml Datei ist als:

default: 
    extensions: 
    Behat\MinkExtension: 
     base_url: http://myURL.com 
     selenium2: ~ 
     browser_name: 'chrome' 
    suites: 
     defaults: 
      contexts: 
       - FeatureContext 
       - Behat\MinkExtension\Context\MinkContext 

Meine FeatureContext.php Datei ist als

class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext 
{ 
    // 
    /** 
    * 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() 
    { 
     $this->driver = new \Behat\Mink\Driver\Selenium2Driver('chrome'); 
     $this->session = new \Behat\Mink\Session($this->driver); 
     $this->session->start(); 
    } 
    public function iAmOnHomepage($arg1) 
    { 
     $this->getSession()->visit($this->locatePath('http://myURL.com')); 
    } 
    /** 
    * @When |I fill in :arg1 with :arg2 
    */ 
    public function iFillInWith($username, $password) 
    { 
     $MinkContext = new MinkContext; 
     $MinkContext -> assertFieldContains ("username" , $username); 
     $MinkContext -> assertFieldContains ("password" , $password); 
     $this->driver->close(); 
    } 
} 

ich diese folgende Fehlermeldung erhalten:

FeatureContext::iAmOnHomepage() 
Behat\MinkExtension\Context\MinkContext::iAmOnHomepage() And press 
"Login" Step "/^(?:|I)am on (?:|the)homepage$/" is already defined 
in FeatureContext::iAmOnHomepage() 

Antwort

0

umbenennen public function iAmOnHomepage($arg1) info etwas, zum Beispiel public function IAmAtHomepage($arg1)

oder Anmerkung setzen zu iAmOnHomepage

/** 
* @When I am on Homepage with :arg1 
*/ 

Das Problem richtig scheint nun, dass die automatische Analyse von Funktionsnamen in dem Zustand Konflikte mit internem Zustand Behat\MinkExtension\Context\MinkContext::iAmOnHomepage()

1

In Ihrem Fall zu sein, Sie bekommen diese Fehler, da Sie MinkContext zweimal in FeatureContext und Trog werden geladen behat.yml.

Wenn Sie FeatureContext mit MinkContext erweitert haben, müssen Sie MinkContext nicht in behat.yml deklarieren.
Das Entfernen der Zeile Behat\MinkExtension\Context\MinkContext von behat.yml sollte Ihr Problem lösen.

1

Ist dies Ihre Anforderung ‚Als Besucher sollte ich die Homepage laden können‘ ist in Ihrem Szenario folgenden Schritt als ersten Schritt, dann das Add:

ich auf der Homepage am Gegeben

Entfernen Sie die Funktion iAmOnHomepage() aus Ihrer FeatureContext Datei, da dies bereits eine Standardfunktion bei Mink ist. Dies würde Konflikte verursachen. Oder ändern Sie den Namen Ihrer Funktion.

public function iFillInWith($username, $password) 
{ 
    $MinkContext = new MinkContext; 
    $MinkContext -> assertFieldContains ("username" , $username); 
    $MinkContext -> assertFieldContains ("password" , $password); 
    $this->driver->close(); 
} 

Ich glaube nicht, dass Sie die oben genannten Schritte benötigen. Sie bestätigen nur die Felder hier und verwenden diese Funktion nirgends in Ihrer Feature-Datei.

Bitte beachten Sie - Gherkin Aussagen werden in der Form von gegeben, wann und dann geschrieben. Sie müssen Ihre Szenarien hier auch lesbar machen.

Verwandte Themen