Behat error — шаг уже определен

Вот мой файл функций
Особенность: Как посетитель я должен быть в состоянии загрузить домашнюю страницу

  @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

Решение

В вашем случае вы получаете эту ошибку, потому что вы загружаете MinkContext дважды в FeatureContext и через behat.yml.

Если вы расширили FeatureContext с помощью MinkContext, вам не нужно объявлять MinkContext в behat.yml.
Удаление линии Behat\MinkExtension\Context\MinkContext от behat.yml должен решить вашу проблему.

2

Другие решения

Если это ваше требование «Как посетитель, я должен иметь возможность загрузить домашнюю страницу», то добавьте следующий шаг в качестве первого шага в вашем сценарии:

Учитывая, что я на главной странице

Удалить функцию iAmOnHomepage() от твоего FeatureContext файл, так как это уже стандартная функция, доступная с Mink. Это создало бы конфликты. Или измените название вашей функции.

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

Я не думаю, что вам нужны вышеуказанные шаги. Вы просто устанавливаете поля здесь и не используете эту функцию где-либо в вашем файле возможностей.

Пожалуйста, обратите внимание — заявления корнишона написаны в форме «дано, когда и потом». Вы также должны будете сделать свои сценарии удобочитаемыми здесь.

1

переименовывать public function iAmOnHomepage($arg1) например, что-то public function IAmAtHomepage($arg1)

Или поставить аннотацию к iAmOnHomepage

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

Проблема сейчас заключается в том, что авторазбор имени функции в условие конфликтует с внутренним условием. Behat\MinkExtension\Context\MinkContext::iAmOnHomepage()

0
По вопросам рекламы [email protected]