Могу ли я использовать один из сценариев в качестве мета-шага вместо определения его в классе Context?

Мне нужно определить мета-шаг как I have an item in my order cart, Но вместо создания определения этого шага в классе Context я хочу просто использовать существующие шаги в некотором файле объектов. Потому что у меня уже есть сценарий для тестирования функции Adding item to order cart,

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

4

Решение

Короткий ответ: Нет.

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

Решение состоит в том, чтобы рассматривать ваши контекстные файлы как мост между файлами компонентов и кодом php. Это означает, что методы файла контекста короткие, и делегируют большую часть работы другим объектам. Таким образом, нет никакого дублирования между контекстами, вы просто вызываете другие объекты:

/**
* @Given I open the product page
*/
public function iOpenTheProductPage()
{
$this->productPage->open();
}

/**
* @Given I add a :product to the cart
*/
public function iAddProductToTheCart($product)
{
$this->productPage->addToCart($product);
}

/**
* @Given I have an item in the cart
*/
public function iHaveAnItemInTheCart()
{
// reuse
$this->productPage->open();
$this->productPage->addProduct('Behat t-shirt');

// ... or put the items directly to the db!
}

Кроме того, на практике добавление товара в корзину может выглядеть несколько иначе в зависимости от того, что мы тестируем.

Если вы работаете над «Добавление в корзинуПо сценарию, вы, вероятно, захотите пройти через процесс посещения страницы и добавления товаров в корзину.

Если, однако, вы работаете над «Просмотр мини-корзины в шапке«Сценарий, вы можете использовать ярлыки, чтобы сделать ваш набор тестов немного быстрее.Учитывая, что у меня есть товар в корзине«, вы можете просто поместить элемент непосредственно в базу данных / сеанс / что бы там ни было. Вы можете себе позволить этот вид ярлыка, так как вы рассмотрели добавление элементов в корзину в других сценариях.

Кстати, если вы автоматизируете тесты для веб-приложений, вы найдете такие шаблоны, как объекты страницы очень полезно.

4

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

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

FWIW, Everzet (создатель Behat) недавно выступил против мета-шагов, поскольку их действительно трудно поддерживать. Более поддерживаемым вариантом является использование базовых функций PHP для шагов вместо вызова их через мета-шаги. Однако, горе тому, кто смешивает мета-шаги с вызовами функций! Лучше всего заранее решить, по какому пути вы пойдете.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector