2016-09-21 108 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的形式写成的。你也必须让你的场景在这里可读。