Вот мой файл функций
Особенность: Как посетитель я должен быть в состоянии загрузить домашнюю страницу
@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()
В вашем случае вы получаете эту ошибку, потому что вы загружаете MinkContext дважды в FeatureContext и через behat.yml.
Если вы расширили FeatureContext с помощью MinkContext, вам не нужно объявлять MinkContext в behat.yml.
Удаление линии Behat\MinkExtension\Context\MinkContext
от behat.yml должен решить вашу проблему.
Если это ваше требование «Как посетитель, я должен иметь возможность загрузить домашнюю страницу», то добавьте следующий шаг в качестве первого шага в вашем сценарии:
Учитывая, что я на главной странице
Удалить функцию iAmOnHomepage()
от твоего FeatureContext
файл, так как это уже стандартная функция, доступная с Mink. Это создало бы конфликты. Или измените название вашей функции.
public function iFillInWith($username, $password)
{
$MinkContext = new MinkContext;
$MinkContext -> assertFieldContains ("username" , $username);
$MinkContext -> assertFieldContains ("password" , $password);
$this->driver->close();
}
Я не думаю, что вам нужны вышеуказанные шаги. Вы просто устанавливаете поля здесь и не используете эту функцию где-либо в вашем файле возможностей.
Пожалуйста, обратите внимание — заявления корнишона написаны в форме «дано, когда и потом». Вы также должны будете сделать свои сценарии удобочитаемыми здесь.
переименовывать public function iAmOnHomepage($arg1)
например, что-то public function IAmAtHomepage($arg1)
Или поставить аннотацию к iAmOnHomepage
/**
* @When I am on Homepage with :arg1
*/
Проблема сейчас заключается в том, что авторазбор имени функции в условие конфликтует с внутренним условием. Behat\MinkExtension\Context\MinkContext::iAmOnHomepage()