как (где) определить шаг функции в Behat/Mink

У меня возникают проблемы с определением собственных шагов для функций BDD в настройках Behat и Mink в среде Yii.

Я успешно установил Behat с расширением Mink, следуя инструкциям из MinkExtension-example< /а>.

После всего этого у меня есть следующая структура моих папок внутри myapp/private_html/ (некоторые глубоко вложенные папки были опущены):

├───bin
├───commands
│   └───shell
├───components
├───config
├───controllers
├───features
│   ├───bootstrap
│   └───php54_bootstrap
├───models
├───tests
├───vendor
│   ├───behat
│   │   ├───behat
│   │   │   ├───bin
│   │   │   ├───features
│   │   │   │   ├───annotations
│   │   │   │   ├───bootstrap
│   │   │   │   └───closures
└───views

Функция, представленная в качестве примера в вышеупомянутой ссылке MinkExtension-example работает без проблем. Но когда я определяю свой собственный шаг, как

  Scenario: presence of menu items
    Given I am on "/"
    Then I should see the following: "Home, About, Contact"

я получил

1 scenario (1 undefined)
2 steps (1 passed, 1 undefined)
0m2.288s

с предложением

You can implement step definitions for undefined steps with these snippets:

/**
 * @Then /^I should see the following: "([^"]*)"$/
 */
public function iShouldSeeTheFollowing($arg1)
{
    throw new PendingException();
}

И вопрос: куда мне вставить этот код? Я пытался вставить это

myapp\private_html\features\bootstrap\FeatureContext.php

а также в

myapp\private_html\vendor\behat\behat\features\bootstrap\FeatureContext.php 

но шаг остается неопределенным.

Итак, где должны быть определены шаги?


person Andrew    schedule 31.08.2013    source источник


Ответы (2)


Вам никогда не придется менять код поставщика (я полагаю, вы используете композитор). Это не ваш код.

Ваш код должен быть добавлен в functions\bootstrap\FeatureContext.php.

Возможно, проблема в том, что ваш класс FeatureContext расширяет не MinkContext, а BehatContext. Вы найдете комментарий в файле FeatureContext. Измените родительский класс FeatureContext с BehatContext на MinkContext.

Наконец, чтобы увидеть все предложения, которые может видеть ваш контекст, запустите «./bin/behat -dl». Если вы запустите эту команду перед изменением контекста, вы увидите, что behat имеет несколько предложений.

person sensorario    schedule 01.09.2013
comment
Вы говорите, что эти две папки vendor и bin являются общедоступными, несмотря на то, что они находятся в папке private_html? Я попробую с вашими предложениями добавить определения шагов в файл features\bootstrap\FeatureContext.php. - person Andrew; 01.09.2013
comment
Нет простите. Я удалил эту часть ответа. - person sensorario; 01.09.2013
comment
Я попытался добавить свои шаги в features\bootstrap\FeatureContext.php, но, как и прежде, шаг остается неопределенным. Действительно, я не понимаю идею контекста, о которой вы упомянули, но я попытался кое-что сделать: 1. сначала нужно было добавить $this-›useContext('mink', new MinkContext()); в конструктор - но ничего не изменилось 2. потом я добавил use Behat\MinkExtension\Context\MinkContext; - и опять ничего не изменилось. Кстати, что вы имеете в виду, говоря Изменить родительскую папку FeatureContext с BehatContext на MinkContext? - person Andrew; 01.09.2013
comment
И, естественно, шаг не отображается, когда я запускаю ./bin/behat -dl - person Andrew; 01.09.2013
comment
Извините: я имею в виду... родительский класс. - person sensorario; 02.09.2013
comment
Я следовал инструкциям на официальном сайте Behat и теперь могу добавлять шаги в FeatureContext.php. и они появляются, когда я запускаю behat --init. Проблема в том, что нет предопределенных шагов... - person Andrew; 02.09.2013
comment
Я узнал, в чем была проблема. Пример, который я взял, основан на этом файле конфигурации behat, который каким-то образом переопределяет контекст по умолчанию таким образом, что любые шаги, которые я добавляю в свой bootstrap/FeatureContext.php, просто игнорируются. В отсутствие файла behat.yml я вижу шаги в моем файле FeatureContext. - person Andrew; 02.09.2013
comment
Я бы сказал, что теперь он видит шаги, которые я добавляю в FeatureContext. - person Andrew; 04.09.2013
comment
Будущий контекст, который вы изменяете, — /feature/bootstrap/FeatureContext.php или /vendor/behat/behat/features/bootstrap/FeatureContext.php? - person sensorario; 09.09.2013
comment
Как вы правильно сказали, я изменяю только /feature/bootstrap/FeatureContext.php. - person Andrew; 10.09.2013
comment
Я поместил его здесь, думая, что это просто скопированная версия behat.yml.dist из пример, который я рассматривал. - person Andrew; 11.09.2013

если вы хотите увидеть предопределенные шаги и функции от behat mink.

vendor/bin/behat -dl 

вы увидите шаги, которые вы можете использовать для вашего сайта.

Теперь уже есть шаг, который вы можете использовать

Scenario: presence of menu items
 Given I am on "/"
 Then I should see "Home, About, Contact"
 Theres nothing like "Then I should see following".
person Arpan Buch    schedule 03.09.2013
comment
Вы абсолютно правы в том, что Тогда я должен увидеть следующее не входит в число предопределенных шагов. Именно по этой причине я хотел определить его в своем файле FeatureContext. - person Andrew; 03.09.2013
comment
скопируйте весь данный фрагмент, включая комментарии, в ваш файл functions/bootstrap/FeatureContext.php. ты все копируешь? - person Arpan Buch; 04.09.2013
comment
точно, я все скопировал. Шаг остался неопределенным. Как я полагаю, это связано с настройками в файле behat.yml, которые я использовал в примере. - person Andrew; 04.09.2013
comment
хм, я думаю, что запятые внутри Home, About, Contact могут не работать. потому что, если вы сосредоточитесь на функции, она передает только один аргумент ($ arg1). так что определенно это должно быть с аргументами, которые вы заявляете. Вы хотите, чтобы на странице было 3 вещи: Главная, О нас, Контакты. но функция передает только один аргумент. понял ?? - person Arpan Buch; 06.09.2013
comment
Это было очевидно с самого начала и именно это послужило причиной создания нового шага, который я назвал Then I should see the following: ".....". И проблема заключалась в том, что этот шаг оставался неопределенным, даже если я явно определял его в FeatureContext. Извините, если я не был ясен, когда публиковал вопрос. - person Andrew; 07.09.2013