2016-03-19 8 views
0

Ich teste meine PHP/Bootstrap-Anwendung mit Behat + Mink. Ich versuche derzeit, Variablen zu verwenden, um aus einem Feld mit einer Szenario-Gliederung zu greifen."Der ausgewählte Knoten hat keinen Vorgänger"

Die Website sieht wie folgt aus enter image description here

Mein Code wie diese in Feature-Datei sieht Feature: Stock Portfolio Um zu sehen, welche Aktien Als Nutzer sind im Besitz Ich möchte angezeigt Portfolio

Scenario: User Is On Home Page 
     Given that I am logged in 
     When print current URL 
     Then I should see "Portfolio" 


    Scenario Outline: User Buys Stock 
     Given that I am logged in 
     And I own <start> "AAPL" stocks 
     When I fill in "ticker" with "AAPL" 
     And I sell <sell> stock 
     Then I should own <finish> "AAPL" stocks 

     Examples: 
      | start | sell | finish | 
      | 13 | 5 | 8  | 
      | 10 | 3 | 7  | 

in pHP-Datei

/** 
    * @Then /^I should own (.*) "([^"]*)" stocks$/ 
    */ 
    public function iShouldOwnStocks($start, $arg1) 
    { 
     $this->assertSession()->fieldValueEquals($arg1, $start); 
    } 



    /** 
    * @Given /^I sell (.*) stock$/ 
    */ 
    public function iSellStock($sell) 

    { 
     $this->fillField("quantity", $sell); 
    } 

    /** 
    * @Given /^I own (.*) "([^"]*)" stocks$/ 
    */ 
    public function iOwnStocks($start, $arg1) 
    { 
     $this->assertSession()->fieldValueEquals($arg1, $start); 

    } 

Der Fehler, den ich erhalte ist:

Error

Ich bin nicht ganz sicher, was hier vor sich geht - Hilfe wäre super dankbar!

Antwort

1

Erste, über die regex:

Verwenden (.*) nicht, wenn es am Ende eines Schrittes Definition ist, als hilfreicher Tipp für Sie oder andere Entwickler Bugfixing später. Diese Regex bedeutet wörtlich, akzeptieren Sie jedes Zeichen außer einer neuen Zeile.

Verwenden Sie stattdessen ([0-9]+), die nur Zahlen akzeptieren, oder ([\d]+), die wiederum nur Zahlen akzeptieren und nur akzeptieren, wenn es 1 oder mehr gibt.

Zweitens, über die regex:

Versuchen Sie auch die Nummer mit doppelten Anführungszeichen kapseln, "([0-9]+)" oder "([\d]+)", die wie oben das gleiche tun sollte, aber macht es etwas klarer, indem nur Zahlen in Zitate.

vorletzt, über die regex

Wenn Sie immer noch Probleme mit den Ziffern sind, wegen einer Nachkommastelle, verwenden Sie diese:

"([\d])*\.?([\d]){0,2}"

Welche jede Menge Zahlen erfassen wird vor, eine optionale Dezimalstelle und bis zu zwei Zahlen nach.

Schließlich, um Doppelfunktionen

Sie das Gleiche behaupten zweimal in zwei separaten Schritt Definitionen. Persönlich würde ich die

/** 
* @Then /^I should own (.*) "([^"]*)" stocks$/ 
*/ 
public function iShouldOwnStocks($start, $arg1) 
{ 
    $this->assertSession()->fieldValueEquals($arg1, $start); 
} 

Funktion

/** 
* @Then /^I (?:|should)own "([0-9]+)" "([^"]*)" stocks$/ 
*/ 
public function iShouldOwnStocks($start, $arg1) 
{ 
    $this->assertSession()->fieldValueEquals($arg1, $start); 
} 

ändern, die die „sollte“ optional, dh keine Vervielfältigung der gleichen Behauptung erforderlich machen, so dass Ihr Kontext weniger chaotisch.

Grundsätzlich werden Sie nicht mehr diese benötigen:

/** 
* @Given /^I own (.*) "([^"]*)" stocks$/ 
*/ 
public function iOwnStocks($start, $arg1) 
{ 
    $this->assertSession()->fieldValueEquals($arg1, $start); 

} 

Wenn es noch ein Problem, nachdem die regex-Fixes, die ich vorgeschlagen habe, lassen Sie einen Kommentar, und ich werde es in einem neuen Absatz zu beantworten versuchen.

+0

Super hilfreich. Vielen Dank! Entschuldigung - ich dachte, meine Antwort wäre durchgegangen – iceblender