2013-08-31 5 views
0

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

Я успешно установил Behat с расширением норки в соответствии с инструкциями от 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 

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

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

ответ

1

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

Код должен быть добавлен в функции \ bootstrap \ FeatureContext.php.

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

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

+0

Вы говорите, что эти две папки ** поставщика ** и ** ** бен являются общедоступными, несмотря на то, что они находятся в папке ** private_html ** ? Я попробую с вами предложения по добавлению определений шагов в файл ** features \ bootstrap \ FeatureContext.php **. – Andrew

+0

Нет сожаления. Я удаляю эту часть ответа. – sensorario

+0

Я попытался добавить свои шаги к ** features \ bootstrap \ FeatureContext.php **, и, как и прежде, шаг остается неопределенным. В самом деле, я не понимаю идею контекста, о которой вы говорили, но я попытался что-то сделать: 1.первая попытка заключалась в том, чтобы добавить ** $ this-> useContext ('mink', новый MinkContext()); ** в конструктор, но ничего не изменилось 2. Затем я добавил ** использовать Behat \ MinkExtension \ Context \ MinkContext; * * - и снова ничего не изменилось. Кстати, что вы хотите сказать ** Изменить родительскую папку FeatureContext от BehatContext до MinkContext **? – Andrew

0

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

vendor/bin/behat -dl 

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

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

Scenario: presence of menu items 
Given I am on "/" 
Then I should see "Home, About, Contact" 
Theres nothing like "Then I should see following". 
+0

Вы абсолютно правы, что ** Тогда я должен видеть следующее **, не входит в число предопределенных шагов. Именно по этой причине я хотел определить его в своем файле FeatureContext. – Andrew

+0

скопируйте весь данный фрагмент, включая комментарии под вашими функциями/bootstrap/FeatureContext.php. вы все копируете? –

+0

точно, я скопировал все. Шаг оставался неопределенным. Как я полагаю, это связано с настройками в файле behat.yml, который я использовал из примера. – Andrew