2016-09-21 44 views
0

這裏是我的特性文件 特點:作爲一個遊客,我應該能夠加載主頁貝哈特錯誤 - 步已被定義

@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" 

我composer.json是如下:

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

我behat.yml文件如下:

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

我FeatureContext.php文件是

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(); 
    } 
} 

我得到這個以下錯誤:

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

回答

0

重命名public function iAmOnHomepage($arg1)信息的東西,例如,public function IAmAtHomepage($arg1)

或者把註釋到iAmOnHomepage

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

現在的問題似乎是函數名稱自動解析與內部條件Behat\MinkExtension\Context\MinkContext::iAmOnHomepage()

1

條件衝突在你的情況,因爲你是在FeatureContext和波谷加載MinkContext兩倍您收到此錯誤behat.yml。

如果使用MinkContext擴展FeatureContext,則不必在behat.yml中聲明MinkContext。
從behat.yml中刪除行Behat\MinkExtension\Context\MinkContext應該可以解決您的問題。

1

如果這是您的要求「作爲一個遊客,我應該能夠加載主頁」,然後添加下面的步驟爲您的方案的第一步:

鑑於我在主頁上

FeatureContext文件中刪除功能iAmOnHomepage(),因爲這已經是貂皮可用的標準功能。這會造成衝突。或者改變你的功能的名稱。

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

我不認爲你需要上述步驟。你只是在這裏斷言這些字段,而不是在你的特性文件的任何地方使用這個函數。

請注意 - 小黃瓜的陳述是以Given,When和Then的形式寫成的。你也必須讓你的場景在這裏可讀。