2016-03-19 112 views
0

我正在用Behat + Mink測試我的PHP/bootstrap應用程序。我目前正嘗試使用變量從場景大綱字段中抓取。「所選節點沒有表單祖先」

該網站看起來像這樣 enter image description here

我的代碼看起來像這樣 在功能文件 特點:股票投資組合 爲了看看還有哪些個股擁有 作爲用戶 我要顯示我的組合

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  | 

在PHP文件

/** 
    * @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); 

    } 

我不斷收到的錯誤是:

Error

我不太清楚是怎麼回事 - 幫助將是非常感謝!

回答

1

首先,對正則表達式:

不要使用(.*),除非它是在步驟定義的結束,作爲一個有用的提示你的,或者以後其他開發商bug修復。這個正則表達式的意思是,接受除新行之外的任何字符。

取而代之,使用([0-9]+),它只接受數字,或者([\d]+),它將再次只接受數字,並且只會在接收數字時接受它們,如果有一個或多個。

其次,對正則表達式:

嘗試使用雙引號,"([0-9]+)""([\d]+)"也封裝的數量,這應該做的和上面一樣,但使得它稍微清楚,只允許在數字引號。

Penultimately,對正則表達式

如果您仍然有,因爲一個小數位的同位的麻煩,使用此:

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

這將捕獲的任何數字量之前,一個可選的小數位,以及最多兩個數字之後。

最後,有關的職能

重複你在兩個單獨的步驟定義斷言同樣的事情兩次。 就個人而言,我會改變

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

功能

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

這將使「應該」可選的,這意味着沒有必要同斷言的重複,使您的上下文少凌亂。

基本上,你將不再需要這樣的:

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

} 

如果仍有問題正則表達式修復我曾經建議後,發表評論,我將試圖回答這個問題在一個新的段落。

+0

超級有用。謝謝!道歉 - 我認爲我的回覆已經完成 – iceblender

相關問題