Можете ли вы назвать сценарии шагами в Behat 3?

При написании функциональных тестов некоторые части повторяются довольно часто. Например, вход пользователей:

I go to "/login"
I fill in "login" with "username"
I fill in "password" with "password"
I press "Login"

Я хотел бы определить эти шаги как:

Given I am logged in as "userA" 

Теперь в Behat 2.x я бы определил шаг в php:

return array(
    new Step\Given('I go to "/login"'), 
    new Step\Then('I fill in "login" with "username"'), 
    new Step\Then('I fill in "password" with "password"'), 
    new Step\Then('I press "Login"'), 
);

Это поведение все еще поощряется для Behat 3? Есть лучший способ сделать это?


person i.am.michiel    schedule 27.12.2014    source источник
comment
Руководство по переходу с Behat 2 на Behat 3 еще не выпущено. Поэтому вам необходимо изучить информацию из журнала изменений и выбрать из тех вещей, которые представляют ваш интерес для дальнейшего поиска их. Сборка расширения цепочки шагов для поведения 3 в настоящее время не работает.   -  person hakre    schedule 27.12.2014
comment
Привет, ты нашел способ сделать это? Мне нужен этот функционал. IMO отказываться от этого было недальновидно, поскольку я использую Behat для тестирования внешних API, у которых есть процессы, которые необходимо опрашивать с помощью ряда шагов.   -  person John Hunt    schedule 26.02.2019


Ответы (1)


Это называется цепочкой выполнения шагов и было удалено в Behat 3. Вот исходный ответ создателя Behat.

Если вы хотите использовать MinkContext, просто расширьте его в своем контексте или, если ваш код более сложный, используйте такие шаблоны, как композиция. Затем вы сможете напрямую вызывать методы, отвечающие за такие шаги, как:

class FeatureContext extends MinkContext
{
    /**
     * @Given I am logged in as :user
     */
    public function iAmLoggedInAsUser($user)
    {
        $this->visit('/login');
        $this->fillField('login', 'username');
        $this->fillField('password', 'password');
        $this->pressButton('Login');
        // make assertion to be sure user is logged in
    }
}

Другой замечательный разговор о контекстах, шагах и языке Behat находится здесь

person Sławomir Chrobak    schedule 12.01.2015
comment
Спасибо за Ваш ответ. Я действительно нашел эту информацию сам и расширение Stof, повторно вводящее цепные шаги. Однако единственная проблема, которая у меня есть с вашим решением, заключается в том, что вы не можете иметь несколько контекстов, расширяющих MinkContext. Behat будет жаловаться на уже определенные шаги. Вы знаете, как это решить? - person i.am.michiel; 13.01.2015
comment
Это правильное поведение. Здесь вам объяснили. Если вы хотите использовать Mink в качестве основы для своих контекстов, вы должны расширить RawMinkContext. Все дело в том, как вы организуете свои контексты. - person Sławomir Chrobak; 13.01.2015