Допустим, у меня есть несколько слагов страниц в базе данных, которые я хотел бы проверить с Behat, если страницы возвращают код состояния заголовка 200.
Это означает, что я хочу иметь один тест (функцию), который будет проверять несколько страниц, однако я изо всех сил пытаюсь это сделать.
Прямо сейчас я использую что-то вроде этого:
Given I am on any page, I should get header status code 200
Который запускает одну функцию, и каждая логика находится внутри этой функции.
Но в идеале я хочу что-то вроде этого:
Given I go through all pages
When I check the header status for each page
Then I should get header status code 200
Есть ли способ сделать это?
Примечание. Я использую класс FeatureContext и попытался сохранить, например, все страницы в закрытой переменной, а затем пытались получить к ней доступ на следующем шаге функции, но это, похоже, не работает.
Для одна страница, это сделано так
Пример сценария:
Scenario: Request and Response for single page
Given I am on "/homepage"When I send a GET request to "/cars/list_all"And the response status code should be 200
Пример файла контекста:
Вам нужно добавить метод ниже.
class FeatureContext extends MinkContext implements KernelAwareInterface
{
/**
* @When /^I send a ([^"]*) request to "([^"]*)"$/
*/
public function iSendARequestTo($method, $url)
{
$client = $this->getSession()->getDriver()->getClient();
$client->request($method, $url);
}
}
MinkContext:
Это уже существует, поэтому вы не будете трогать его.
class MinkContext extends RawMinkContext implements TranslatedContextInterface
{
/**
* Checks, that current page response status is equal to specified.
*
* @Then /^the response status code should be (?P<code>\d+)$/
*/
public function assertResponseStatus($code)
{
$this->assertSession()->statusCodeEquals($code);
}
}
За несколько страниц, вы будете использовать Контуры сценария.
Scenario Outline: Request and Response for multiple pages
Given I am on "/homepage"When I send a <method> request to <end-point>
And the response status code should be <response-code>
Examples:
| method | end-point | response-code |
| POST | /api/page-one | 200 |
| PUT | /api/page-two | 200 |
Других решений пока нет …