Spec-Zone.ru › Codeception

Symfony

Установка

Если вы используете Codeception, установленный через composer, установите этот модуль с помощью следующей команды:

composer require --dev codeception/module-symfony

В качестве альтернативы, вы можете включить Symfony модуль в файле конфигурации набора тестов и выполнить

codecept init upgrade4

Этот модуль был включён в Codeception 2 и 3, но с версии 4 его необходимо устанавливать отдельно.
Некоторые модули поставляются с файлами PHAR.
Предупреждение. Использование файлов PHAR и composer в одном проекте может привести к непредвиденным ошибкам.

Описание

Этот модуль использует Symfony DomCrawler и HttpKernel для эмуляции запросов и тестирования ответа.

  • Доступ к службам Symfony через контейнер внедрения зависимостей: $I->grabService(...)
  • Использование Doctrine для тестирования базы данных: $I->seeInRepository(...) — см. Doctrine Module
  • Проверка отправки писем: $I->seeEmailIsSent()
  • Тесты обернуты в транзакцию Doctrine для ускорения.
  • Symfony Router может кэшироваться между запросами для ускорения тестирования.

Демо-проект

https://github.com/Codeception/symfony-module-tests

Конфигурация

Symfony 5.x или 4.4

  • app_path: ‘src’ - Укажите пользовательский путь к каталогу приложения, где расположен интерфейс ядра.
  • environment: ‘local’ - Окружение, используемое для загрузки ядра.
  • kernel_class: ‘App\Kernel’ - Имя класса ядра.
  • em_service: ‘doctrine.orm.entity_manager’ - Используйте указанный EntityManager для сопряжения с Doctrine Module.
  • debug: true - Включить/выключить режим отладки.
  • cache_router: ‘false’ - Включить кэширование маршрутизатора между тестами для повышения производительности
  • rebootable_client: ‘true’ - Перезапускать ядро клиента перед каждым запросом.
Пример (functional.suite.yml) - Структура каталогов Symfony 4
modules: enabled: - Symfony: app_path: 'src' environment: 'test'

Общедоступные свойства

  • kernel - Экземпляр HttpKernel
  • client - текущий экземпляр Crawler

Части

  • services: Включает методы, связанные с контейнером внедрения зависимостей Symfony (DIC):
    • grabService
    • persistService
    • persistPermanentService
    • unpersistService

См. модуль WebDriver для общей информации о том, как загружать части модуля фреймворка.

Пример использования:

actor: AcceptanceTester
modules:
    enabled:
        - Symfony:
            part: services
        - Doctrine2:
            depends: Symfony
        - WebDriver:
            url: http://example.com
            browser: firefox

Если вы используете Symfony с Eloquent ORM (вместо Doctrine), вы можете загрузить ORM часть модуля Laravel в дополнение к модулю Symfony.

Действия

_findElements

скрытый API-метод, предполагается использовать из вспомогательных классов

Находит элемент, используя доступные типы локеров Codeception:

  • XPath
  • CSS
  • Строгий локер

Используйте его во вспомогательных или GroupObject или Extension классах:

<?php
$els = $this->getModule('Symfony')->_findElements('.items');
$els = $this->getModule('Symfony')->_findElements(['name' => 'username']);

$editLinks = $this->getModule('Symfony')->_findElements(['link' => 'Edit']);
// now you can iterate over $editLinks and check that all them have valid hrefs

Модуль WebDriver возвращает Facebook\WebDriver\Remote\RemoteWebElement экземпляры PhpBrowser и Framework модули возвращают Symfony\Component\DomCrawler\Crawler экземпляры

  • param $locator
  • return array интерактивных элементов

_getResponseContent

скрытый API-метод, предполагается использовать из вспомогательных классов

Возвращает содержимое последнего ответа. Используйте его во вспомогательных классах, когда нужно получить ответ запроса, выполненного другим модулем.

<?php
// in Helper class
public function seeResponseContains($text)
{
   $this->assertStringContainsString($text, $this->getModule('Symfony')->_getResponseContent(), "response contains");
}
  • return string @throws ModuleException

_loadPage

скрытый API-метод, предполагается использовать из вспомогательных классов

Открывает страницу с произвольными параметрами запроса. Полезно для тестирования многоэтапных форм на определённом шаге.

<?php
// in Helper class
public function openCheckoutFormStep2($orderId) {
    $this->getModule('Symfony')->_loadPage('POST', '/checkout/step2', ['order' => $orderId]);
}
  • param string $method
  • param string $uri
  • param string $content

_request

скрытый API-метод, предполагается использовать из вспомогательных классов

Отправляет пользовательский запрос на бэкенд с использованием метода, URI, параметров и т.д. Используйте его во вспомогательных классах для создания специальных действий запроса, например, для доступа к API. Возвращает строку с телом ответа.

<?php
// in Helper class
public function createUserByApi($name) {
    $userData = $this->getModule('Symfony')->_request('POST', '/api/v1/users', ['name' => $name]);
    $user = json_decode($userData);
    return $user->id;
}

Не загружает ответ в модуль, поэтому вы не можете взаимодействовать со страницей ответа (нажимать, заполнять формы). Чтобы загрузить произвольную страницу для взаимодействия, используйте метод _loadPage.

  • param string $method
  • param string $uri
  • param string $content
  • return string @throws ExternalUrlException @see _loadPage

_savePageSource

скрытый API-метод, предполагается использовать из вспомогательных классов

Сохраняет исходный код страницы в файл

$this->getModule('Symfony')->_savePageSource(codecept_output_dir().'page.html');
  • param $filename

amHttpAuthenticated

Авторизует пользователя для HTTP_AUTH

  • param string $username
  • param string $password

amLoggedInAs

Вход с заданным объектом пользователя. Объект $user должен иметь постоянный идентификатор. Если у вас более одного брандмауэра или контекста брандмауэра, вы можете указать нужный как параметр.

<?php
$user = $I->grabEntityFromRepository(User::class, [
    'email' => 'john_doe@example.com'
]);
$I->amLoggedInAs($user);
  • param UserInterface $user
  • param string $firewallName
  • param null $firewallContext

amOnAction

Открывает веб-страницу по имени действия

<?php
$I->amOnAction('PostController::index');
$I->amOnAction('HomeController');
$I->amOnAction('ArticleController', ['slug' => 'lorem-ipsum']);
  • param string $action
  • param array $params

amOnPage

Открывает страницу по заданному относительному URI.

<?php
// opens front page
$I->amOnPage('/');
// opens /register page
$I->amOnPage('/register');
  • param string $page

amOnRoute

Открывает веб-страницу с использованием имени маршрута и параметров.

<?php
$I->amOnRoute('posts.create');
$I->amOnRoute('posts.show', ['id' => 34]);
  • param string $routeName
  • param array $params

assertEmailAddressContains

Проверить, что электронное письмо содержит адреса с заголовком RFC4021 $headerName и его ожидаемым значением $expectedValue. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailAddressContains('To', 'jane_doe@example.com');

assertEmailAttachmentCount

Проверить, что электронное письмо отправило указанное количество $count вложений. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailAttachmentCount(1);

assertEmailHasHeader

Проверить, что электронное письмо имеет заголовок RFC4021 $headerName. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailHasHeader('Bcc');

assertEmailHeaderNotSame

Проверить, что заголовок RFC4021 $headerName электронного письма не совпадает с ожидаемым $expectedValue. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailHeaderNotSame('To', 'john_doe@gmail.com');

assertEmailHeaderSame

Проверить, что заголовок RFC4021 $headerName электронного письма совпадает с ожидаемым $expectedValue. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailHeaderSame('To', 'jane_doe@gmail.com');

assertEmailHtmlBodyContains

Проверить, что HTML тело электронного письма содержит $text. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailHtmlBodyContains('Successful registration');

assertEmailHtmlBodyNotContains

Проверить, что HTML тело электронного письма не содержит текст $text. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailHtmlBodyNotContains('userpassword');

assertEmailNotHasHeader

Проверить, что электронное письмо не имеет заголовка RFC4021 $headerName. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailNotHasHeader('Bcc');

assertEmailTextBodyContains

Проверить, что текстовое тело электронного письма содержит $text. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailTextBodyContains('Example text body');

assertEmailTextBodyNotContains

Проверить, что текстовое тело электронного письма не содержит $text. Если объект Email не указан, используется последнее отправленное письмо.

<?php
$I->assertEmailTextBodyNotContains('My secret text body');

attachFile

Прикрепляет файл, относящийся к каталогу Codeception _data к указанному полю загрузки файлов.

<?php
// file is stored in 'tests/_data/prices.xls'
$I->attachFile('input[@type="file"]', 'prices.xls');
?>
  • param $field
  • param $filename

checkOption

Отмечает флажок. Для радиокнопок используйте метод selectOption.

<?php
$I->checkOption('#agree');
?>
  • param $option

click

Выполняет щелчок по ссылке или кнопке, заданной локером. Если задан размытый локер, страница будет просмотрена на предмет кнопки, ссылки или изображения, соответствующего строке локера. Для кнопок ищется атрибут «value», атрибут «name» и внутренний текст. Для ссылок ищется текст ссылки. Для изображений ищется атрибут «alt» и внутренний текст любых родительских ссылок.

Второй параметр — контекст (локер CSS или XPath) для сужения поиска.

Обратите внимание, что если локер соответствует кнопке типа submit, форма будет отправлена.

<?php
// simple link
$I->click('Logout');
// button of form
$I->click('Submit');
// CSS button
$I->click('#form input[type=submit]');
// XPath
$I->click('//form/*[@type="submit"]');
// link in context
$I->click('Logout', '#nav');
// using strict locator
$I->click(['link' => 'Login']);
?>
  • param $link
  • param $context

deleteHeader

Удаляет заголовок с переданным именем. Последующие запросы не будут содержать удалённый заголовок в своём запросе.

Пример:

<?php
$I->haveHttpHeader('X-Requested-With', 'Codeception');
$I->amOnPage('test-headers.php');
// ...
$I->deleteHeader('X-Requested-With');
$I->amOnPage('some-other-page.php');
  • param string $name имя заголовка для удаления.

dontSee

Проверяет, что текущая страница не содержит указанный текст (регистронезависимо). В качестве второго параметра задайте локер для поиска в определённой области.

<?php
$I->dontSee('Login');                         // I can suppose user is already logged in
$I->dontSee('Sign Up','h1');                  // I can suppose it's not a signup page
$I->dontSee('Sign Up','//body/h1');           // with XPath
$I->dontSee('Sign Up', ['css' => 'body h1']); // with strict CSS locator

Обратите внимание, что поиск выполняется после удаления всех HTML-тегов из тела, поэтому $I->dontSee('strong') потерпит неудачу при строках, таких как:

  • <p>I am Stronger than thou</p>
  • <script>document.createElement('strong');</script>

Но проигнорирует строки, такие как:

  • <strong>Home</strong>
  • <div class="strong">Home</strong>
  • <!-- strong -->

Для проверки исходного кода используйте seeInSource().

  • param string $text
  • param array|string $selector необязательный

dontSeeAuthentication

Проверить, что пользователь не авторизован.

<?php
$I->dontSeeAuthentication();

dontSeeCheckboxIsChecked

Проверить, что указанный флажок не выбран.

<?php
$I->dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms
$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form.
?>
  • param $checkbox

dontSeeCookie

Проверяет, что куки с данным именем отсутствует. Вы можете установить дополнительные параметры куки, такие как domain, path в виде массива, переданного в последнем аргументе.

  • param $cookie

  • param array $params

dontSeeCurrentUrlEquals

Проверяет, что текущий URL не равен заданной строке. В отличие от dontSeeInCurrentUrl, это соответствует только полному URL.

<?php
// current url is not root
$I->dontSeeCurrentUrlEquals('/');
?>
  • param string $uri

dontSeeCurrentUrlMatches

Проверяет, что текущий URL не соответствует заданному регулярному выражению.

<?php
// to match root url
$I->dontSeeCurrentUrlMatches('~^/users/(\d+)~');
?>
  • param string $uri

dontSeeElement

Проверяет, что заданный элемент невидим или отсутствует на странице. Вы также можете указать ожидаемые атрибуты этого элемента.

<?php
$I->dontSeeElement('.error');
$I->dontSeeElement('//form/input[1]');
$I->dontSeeElement('input', ['name' => 'login']);
$I->dontSeeElement('input', ['value' => '123456']);
?>
  • param $selector
  • param array $attributes

dontSeeEmailIsSent

Проверяет, что письмо не было отправлено. Проверка основана на \Symfony\Component\Mailer\EventListener\MessageLoggerListener, что означает: Если ваше приложение выполняет HTTP-перенаправление, вам необходимо сначала подавить его с помощью stopFollowingRedirects(); в противном случае эта проверка всегда пройдёт. Начиная с версии 2.0.0, codeception/module-symfony требует от вашего приложения использовать Symfony Mailer. Если ваше приложение по-прежнему использует Swift Mailer, установите ограничение версии на ^1.6.

dontSeeEventTriggered

Проверяет, что один или несколько обработчиков событий не были вызваны во время теста.

<?php
$I->dontSeeEventTriggered('App\MyEvent');
$I->dontSeeEventTriggered(new App\Events\MyEvent());
$I->dontSeeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
  • param string|object|string[] $expected

dontSeeFormErrors

Проверяет, что к отправленной форме не привязаны ошибки.

<?php
$I->dontSeeFormErrors();

dontSeeInCurrentUrl

Проверяет, что текущий URI не содержит заданную строку.

<?php
$I->dontSeeInCurrentUrl('/users/');
?>
  • param string $uri

dontSeeInField

Проверяет, что поле ввода или текстовое поле не содержит заданное значение. Для размытых локаторов поле ищется по тексту метки, CSS и XPath.

<?php
$I->dontSeeInField('Body','Type your comment here');
$I->dontSeeInField('form textarea[name=body]','Type your comment here');
$I->dontSeeInField('form input[type=hidden]','hidden_value');
$I->dontSeeInField('#searchform input','Search');
$I->dontSeeInField('//form/*[@name=search]','Search');
$I->dontSeeInField(['name' => 'search'], 'Search');
?>
  • param $field
  • param $value

dontSeeInFormFields

Проверяет, что массив параметров формы (имя => значение) не установлен в форме, соответствующей переданному селектору.

<?php
$I->dontSeeInFormFields('form[name=myform]', [
     'input1' => 'non-existent value',
     'input2' => 'other non-existent value',
]);
?>

Чтобы проверить, что элементу не было присвоено ни одно из множества значений, можно передать массив как значение:

<?php
$I->dontSeeInFormFields('.form-class', [
     'fieldName' => [
         'This value shouldn\'t be set',
         'And this value shouldn\'t be set',
     ],
]);
?>

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

<?php
$I->dontSeeInFormFields('#form-id', [
     'checkbox1' => true,        // fails if checked
     'checkbox2' => false,       // fails if unchecked
]);
?>
  • param $formSelector
  • param $params

dontSeeInSession

Утверждает, что атрибут сессии не существует или не равен переданному значению.

<?php
$I->dontSeeInSession('attribute');
$I->dontSeeInSession('attribute', 'value');
  • param string $attribute
  • param mixed|null $value

dontSeeInSource

Проверяет, что текущая страница не содержит заданную строку в исходном коде.

<?php
$I->dontSeeInSource('<h1>Green eggs &amp; ham</h1>');
  • param $raw

dontSeeInTitle

Проверяет, что заголовок страницы не содержит заданную строку.

  • param $title

dontSeeLink

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

<?php
$I->dontSeeLink('Logout'); // I suppose user is not logged in
$I->dontSeeLink('Checkout now', '/store/cart.php');
?>
  • param string $text
  • param string $url необязательный

dontSeeOptionIsSelected

Проверяет, что данный параметр не выбран.

<?php
$I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa');
?>
  • param $selector
  • param $optionText

dontSeeOrphanEvent

Проверяет, что во время теста не было событий-сирот.

Событие-сирота — это событие, которое было вызвано вручную с помощью метода dispatch() EventDispatcher, но не было обработано ни одним обработчиком после его отправки.

<?php
$I->dontSeeOrphanEvent();
$I->dontSeeOrphanEvent('App\MyEvent');
$I->dontSeeOrphanEvent(new App\Events\MyEvent());
$I->dontSeeOrphanEvent(['App\MyEvent', 'App\MyOtherEvent']);
  • param string|object|string[] $expected

dontSeeRememberedAuthentication

Проверить, что пользователь не авторизован с помощью опции «запомнить меня».

<?php
$I->dontSeeRememberedAuthentication();

dontSeeRenderedTemplate

Утверждает, что шаблон не был отображён в ответе.

<?php
$I->dontSeeRenderedTemplate('home.html.twig');
  • param string $template

dontSeeResponseCodeIs

Проверяет, что код ответа равен предоставленному значению.

<?php
$I->dontSeeResponseCodeIs(200);

// recommended \Codeception\Util\HttpCode
$I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
  • param int $code

fillField

Заполняет текстовое поле или текстовую область заданной строкой.

<?php
$I->fillField("//input[@type='text']", "Hello World!");
$I->fillField(['name' => 'email'], 'jon@example.com');
?>
  • param $field
  • param $value

followRedirect

Следовать ожидаемому перенаправлению, если оно есть.

<?php
$I->followRedirect();

goToLogoutPath

Перейти к настроенному URL выхода (по умолчанию: /logout). Этот метод включает перенаправление на целевую страницу, настроенную после выхода.

См. документацию Symfony по «Выходу».

grabAttributeFrom

Получает значение заданного атрибута из заданного элемента. Возвращает ошибку, если элемент не найден.

<?php
$I->grabAttributeFrom('#tooltip', 'title');
?>
  • param $cssOrXpath
  • param $attribute

grabCookie

Получает значение куки. Вы можете установить дополнительные параметры куки, такие как domain, path в виде массива, переданного в последнем аргументе. Если куки установлен с помощью запроса ajax (XMLHttpRequest), может возникнуть задержка в браузере, поэтому попробуйте $I->wait(0.1).

  • param $cookie

  • param array $params

grabFromCurrentUrl

Применяет заданное регулярное выражение к текущему URI и возвращает первую подстроку захвата. Если параметры не предоставлены, возвращается весь URI.

<?php
$user_id = $I->grabFromCurrentUrl('~^/user/(\d+)/~');
$uri = $I->grabFromCurrentUrl();
?>
  • param string $uri необязательный

grabLastSentEmail

Возвращает последнее отправленное электронное письмо. Функция основана на \Symfony\Component\Mailer\EventListener\MessageLoggerListener, что означает: если ваше приложение выполняет HTTP-перенаправление после отправки электронного письма, вам необходимо сначала подавить его с помощью stopFollowingRedirects(). Начиная с версии 2.0.0, codeception/module-symfony требует от вашего приложения использовать Symfony Mailer. Если ваше приложение по-прежнему использует Swift Mailer, установите ограничение версии на ^1.6. См. также: grabSentEmails()

<?php
$email = $I->grabLastSentEmail();
$address = $email->getTo()[0];
$I->assertSame('john_doe@example.com', $address->getAddress());
  • return \Symfony\Component\Mime\Email|null

grabMultiple

Получает либо текстовое содержимое, либо значения атрибутов узлов, соответствующих $cssOrXpath, и возвращает их в виде массива.

<a href="#first">First</a>
<a href="#second">Second</a>
<a href="#third">Third</a>
<?php
// would return ['First', 'Second', 'Third']
$aLinkText = $I->grabMultiple('a');

// would return ['#first', '#second', '#third']
$aLinks = $I->grabMultiple('a', 'href');
?>
  • param $cssOrXpath
  • param $attribute
  • return string[]

grabNumRecords

Получает количество записей из базы данных. ‘id’ — параметр поиска по умолчанию.

<?php
$I->grabNumRecords('User::class', ['name' => 'davert']);
  • param string $entityClass Класс сущности
  • param array $criteria Необязательные критерии запроса
  • return int

grabPageSource

Получает исходный код текущей страницы.

@throws ModuleException если страница не открыта.

  • return string Исходный код текущей страницы.

grabParameter

Получает параметр Symfony

<?php
$I->grabParameter('app.business_name');
  • param string $name
  • return mixed|null

grabRepository

Получить репозиторий сущности Doctrine. Работает с объектами, сущностями, репозиториями и интерфейсами репозиториев.

<?php
$I->grabRepository($user);
$I->grabRepository(User::class);
$I->grabRepository(UserRepository::class);
$I->grabRepository(UserRepositoryInterface::class);
  • param object|string $mixed
  • return \Doctrine\ORM\EntityRepository|null

grabSentEmails

Возвращает массив всех отправленных электронных писем. Функция основана на \Symfony\Component\Mailer\EventListener\MessageLoggerListener, что означает: если ваше приложение выполняет HTTP-перенаправление после отправки электронного письма, вам необходимо сначала подавить его с помощью stopFollowingRedirects(). Начиная с версии 2.0.0, codeception/module-symfony требует от вашего приложения использовать Symfony Mailer. Если ваше приложение по-прежнему использует Swift Mailer, установите ограничение версии на ^1.6. См. также: grabLastSentEmail()

<?php
$emails = $I->grabSentEmails();
  • return \Symfony\Component\Mime\Email[]

grabService

Получает сервис из контейнера зависимостей Symfony (DIC). В среде «test» Symfony использует специальный test.service_container. См. документацию «Доступ к контейнеру». Сервисы, которые не где-то не инжектированы в ваше приложение, необходимо определить как public для доступа через Codeception.

<?php
$em = $I->grabService('doctrine');
  • [Part] сервисы
  • param string $serviceId
  • return object

grabTextFrom

Находит и возвращает текстовое содержимое заданного элемента. Если используется размытый локатор, элемент находится с помощью CSS, XPath и по соответствию всего исходного кода страницы регулярному выражению.

<?php
$heading = $I->grabTextFrom('h1');
$heading = $I->grabTextFrom('descendant-or-self::h1');
$value = $I->grabTextFrom('~<input value=(.*?)]~sgi'); // match with a regex
?>
  • param $cssOrXPathOrRegex

grabValueFrom

  • param $field

  • return array|mixed|null|string

haveHttpHeader

Устанавливает HTTP-заголовок в переданное значение — используется в последующих HTTP-запросах через PhpBrowser.

Пример:

<?php
$I->haveHttpHeader('X-Requested-With', 'Codeception');
$I->amOnPage('test-headers.php');

Чтобы использовать специальные символы в ключе заголовка, используйте сущности символов HTML: Пример: Заголовок с символом подчёркивания - ‘Client_Id’ должен быть представлен как - ‘Client_Id’ или ‘Client_Id’

<?php
$I->haveHttpHeader('Client&#95;Id', 'Codeception');
  • param string $name имя заголовка запроса
  • param string $value значение, которое нужно установить для последующих запросов

haveServerParameter

Устанавливает параметр SERVER, действующий для всех последующих запросов.

$I->haveServerParameter('name', 'value');
  • param string $name
  • param string $value

invalidateCachedRouter

Отменить кэширование ранее кэшированных маршрутов.

logout

Метод-псевдоним для logoutProgrammatically()

<?php
$I->logout();

logoutProgrammatically

Аннулирует текущую сессию пользователя и истекает срок действия куки-файлов сессии. Этот метод не включает никаких редиректов после выхода.

<?php
$I->logoutProgrammatically();

makeHtmlSnapshot

Используйте этот метод в рамках интерактивной паузы, чтобы сохранить исходный код HTML текущей страницы.

<?php
$I->makeHtmlSnapshot('edit_page');
// saved to: tests/_output/debug/edit_page.html
$I->makeHtmlSnapshot();
// saved to: tests/_output/debug/2017-05-26_14-24-11_4b3403665fea6.html
  • param null $name

moveBack

Перемещается назад в истории.

  • param int $numberOfSteps (значение по умолчанию 1)

persistPermanentService

Получить сервис $serviceName и добавить его в список постоянных сервисов, сделав этот сервис постоянным между тестами.

  • [Part] сервисы
  • param string $serviceName

persistService

Получить сервис $serviceName и добавить его в список постоянных сервисов.

  • [Part] сервисы
  • param string $serviceName

rebootClientKernel

Перезагрузить ядро клиента. Может использоваться для ручного перезапуска ядра, когда ‘rebootable_client’ => false

<?php

// Perform some requests

$I->rebootClientKernel();

// Perform other requests

resetCookie

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

  • param $cookie

  • param array $params

runSymfonyConsoleCommand

Запустить команду консоли Symfony, получить ответ и вернуть его в виде строки. Рекомендуется использовать для интеграционных или функциональных тестов.

<?php
$result = $I->runSymfonyConsoleCommand('hello:world', ['arg' => 'argValue', 'opt1' => 'optValue'], ['input']);
  • param string $command команда консоли для выполнения
  • param array $parameters параметры (аргументы и опции) для передачи команде
  • param array $consoleInputs ввод консоли (например, для интерактивных вопросов)
  • param int $expectedExitCode ожидаемый код выхода команды
  • return string Возвращает вывод консоли команды

see

Проверяет, что текущая страница содержит заданную строку (регистронезависимо).

Вы можете указать определённый HTML-элемент (через CSS или XPath) как второй параметр, чтобы искать только внутри этого элемента.

<?php
$I->see('Logout');                        // I can suppose user is logged in
$I->see('Sign Up', 'h1');                 // I can suppose it's a signup page
$I->see('Sign Up', '//body/h1');          // with XPath
$I->see('Sign Up', ['css' => 'body h1']); // with strict CSS locator

Обратите внимание, что поиск выполняется после удаления всех HTML-тегов из тела, поэтому $I->see('strong') вернёт true для строк, таких как:

  • <p>I am Stronger than thou</p>
  • <script>document.createElement('strong');</script>

Но не будет true для строк, таких как:

  • <strong>Home</strong>
  • <div class="strong">Home</strong>
  • <!-- strong -->

Для проверки исходного кода используйте seeInSource().

  • param string $text
  • param array|string $selector необязательно

seeAuthentication

Проверяет, что пользователь авторизован.

<?php
$I->seeAuthentication();

seeCheckboxIsChecked

Проверяет, что указанный флажок установлен.

<?php
$I->seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms
$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form.
$I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]');
?>
  • param $checkbox

seeCookie

Проверяет, что куки с заданным именем установлен. Вы можете установить дополнительные параметры куки, такие как domain, path как массив, переданный в последнем аргументе.

<?php
$I->seeCookie('PHPSESSID');
?>
  • param $cookie
  • param array $params

seeCurrentActionIs

Проверяет, что текущая страница соответствует действию

<?php
$I->seeCurrentActionIs('PostController::index');
$I->seeCurrentActionIs('HomeController');
  • param string $action

seeCurrentRouteIs

Проверяет, что текущий URL соответствует маршруту.

<?php
$I->seeCurrentRouteIs('posts.index');
$I->seeCurrentRouteIs('posts.show', ['id' => 8]);
  • param string $routeName
  • param array $params

seeCurrentTemplateIs

Утверждает, что текущая шаблон соответствует ожидаемому шаблону.

<?php
$I->seeCurrentTemplateIs('home.html.twig');
  • param string $expectedTemplate

seeCurrentUrlEquals

Проверяет, что текущий URL равен заданной строке. В отличие от seeInCurrentUrl, это соответствует только полному URL.

<?php
// to match root url
$I->seeCurrentUrlEquals('/');
?>
  • param string $uri

seeCurrentUrlMatches

Проверяет, что текущий URL соответствует заданному регулярному выражению.

<?php
// to match root url
$I->seeCurrentUrlMatches('~^/users/(\d+)~');
?>
  • param string $uri

seeElement

Проверяет, что указанный элемент существует на странице и виден. Вы также можете указать ожидаемые атрибуты этого элемента.

<?php
$I->seeElement('.error');
$I->seeElement('//form/input[1]');
$I->seeElement('input', ['name' => 'login']);
$I->seeElement('input', ['value' => '123456']);

// strict locator in first arg, attributes in second
$I->seeElement(['css' => 'form input'], ['name' => 'login']);
?>
  • param $selector
  • param array $attributes

seeEmailIsSent

Проверяет, было отправлено указанное количество электронных писем (по умолчанию $expectedCount: 1). Проверка основана на \Symfony\Component\Mailer\EventListener\MessageLoggerListener, что означает: если ваше приложение выполняет HTTP-переадресацию после отправки письма, вам необходимо подавить её, используя stopFollowingRedirects() в первую очередь. Начиная с версии 2.0.0, codeception/module-symfony требует от вашего приложения использования Symfony Mailer. Если ваше приложение всё ещё использует Swift Mailer, установите ограничение вашей версии на ^1.6.

<?php
$I->seeEmailIsSent(2);
  • param int $expectedCount ожидаемое количество отправленных писем

seeEventTriggered

Проверяет, что один или несколько обработчиков событий были вызваны во время теста.

<?php
$I->seeEventTriggered('App\MyEvent');
$I->seeEventTriggered(new App\Events\MyEvent());
$I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
  • param string|object|string[] $expected

seeFormErrorMessage

Проверяет, что поле формы имеет ошибку. Вы можете указать ожидаемое сообщение об ошибке как второй параметр.

<?php
$I->seeFormErrorMessage('username');
$I->seeFormErrorMessage('username', 'Username is empty');
  • param string $field
  • param string|null $message

seeFormErrorMessages

Проверяет, что несколько полей формы имеют ошибки.

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

<?php
$I->seeFormErrorMessages(['telephone', 'address']);

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

Этот метод будет проверять, что ожидаемое сообщение об ошибке содержится в фактическом сообщении об ошибке, то есть вы можете указать всё сообщение об ошибке или только часть его:

<?php
$I->seeFormErrorMessages([
    'address'   => 'The address is too long'
    'telephone' => 'too short', // the full error message is 'The telephone is too short'
]);

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

<?php
$I->seeFormErrorMessages([
    'telephone' => 'too short',
    'address'   => null,
    'postal code',
]);
  • param string[] $expectedErrors

seeFormHasErrors

Проверяет, что к отправленной форме привязана одна или несколько ошибок.

<?php
$I->seeFormHasErrors();

seeInCurrentRoute

Проверяет, что текущий URL соответствует маршруту. В отличие от seeCurrentRouteIs, это может соответствовать без точных параметров маршрута

<?php
$I->seeInCurrentRoute('my_blog_pages');
  • param string $routeName

seeInCurrentUrl

Проверяет, что текущий URI содержит заданную строку.

<?php
// to match: /home/dashboard
$I->seeInCurrentUrl('home');
// to match: /users/1
$I->seeInCurrentUrl('/users/');
?>
  • param string $uri

seeInField

Проверяет, что заданное поле ввода или текстовое поле равно (то есть, не просто содержит) заданному значению. Поля сопоставляются по тексту метки, атрибуту «name», CSS или XPath.

<?php
$I->seeInField('Body','Type your comment here');
$I->seeInField('form textarea[name=body]','Type your comment here');
$I->seeInField('form input[type=hidden]','hidden_value');
$I->seeInField('#searchform input','Search');
$I->seeInField('//form/*[@name=search]','Search');
$I->seeInField(['name' => 'search'], 'Search');
?>
  • param $field
  • param $value

seeInFormFields

Проверяет, что массив параметров формы (имя => значение) заданы в форме, соответствующей переданному селектору.

<?php
$I->seeInFormFields('form[name=myform]', [
     'input1' => 'value',
     'input2' => 'other value',
]);
?>

Для элементов множественного выбора или для проверки значений нескольких элементов с одинаковым именем может быть передан массив:

<?php
$I->seeInFormFields('.form-class', [
     'multiselect' => [
         'value1',
         'value2',
     ],
     'checkbox[]' => [
         'a checked value',
         'another checked value',
     ],
]);
?>

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

<?php
$I->seeInFormFields('#form-id', [
     'checkbox1' => true,        // passes if checked
     'checkbox2' => false,       // passes if unchecked
]);
?>

Сочетайте это с submitForm для быстрых тестов.

<?php
$form = [
     'field1' => 'value',
     'field2' => 'another value',
     'checkbox1' => true,
     // ...
];
$I->submitForm('//form[@id=my-form]', $form, 'submitButton');
// $I->amOnPage('/path/to/form-page') may be needed
$I->seeInFormFields('//form[@id=my-form]', $form);
?>
  • param $formSelector
  • param $params

seeInSession

Утверждает, что атрибут сессии существует.

<?php
$I->seeInSession('attribute');
$I->seeInSession('attribute', 'value');
  • param string $attribute
  • param mixed|null $value

seeInSource

Проверяет, что текущая страница содержит заданную строку в её исходном коде.

<?php
$I->seeInSource('<h1>Green eggs &amp; ham</h1>');
  • param $raw

seeInTitle

Проверяет, что заголовок страницы содержит заданную строку.

<?php
$I->seeInTitle('Blog - Post #1');
?>
  • param $title

seeLink

Проверяет, что есть ссылка с указанным текстом. Укажите полный URL в качестве второго параметра, чтобы сопоставить ссылки с этим точным URL.

<?php
$I->seeLink('Logout'); // matches <a href="#">Logout</a>
$I->seeLink('Logout','/logout'); // matches <a href="/logout">Logout</a>
?>
  • param string $text
  • param string $url необязательно

seeNumRecords

Проверяет, что в базе данных найдено указанное количество записей. По умолчанию используется параметр поиска «id».

<?php
$I->seeNumRecords(1, User::class, ['name' => 'davert']);
$I->seeNumRecords(80, User::class);
  • param int $expectedNum Ожидаемое количество записей
  • param string $className сущность Doctrine
  • param array $criteria Необязательные критерии запроса

seeNumberOfElements

Проверяет, что на странице есть определённое количество элементов, соответствующих данному локатору.

<?php
$I->seeNumberOfElements('tr', 10);
$I->seeNumberOfElements('tr', [0,10]); // between 0 and 10 elements
?>
  • param $selector
  • param mixed $expected int или int[]

seeOptionIsSelected

Проверяет, что заданный параметр выбран.

<?php
$I->seeOptionIsSelected('#form input[name=payment]', 'Visa');
?>
  • param $selector
  • param $optionText

seeOrphanEvent

Проверяет, что одно или несколько событий-сирот были отправлены во время теста.

Событие-сирота — это событие, которое было вызвано вручную с помощью метода dispatch() класса EventDispatcher, но не было обработано ни одним слушателем после его отправки.

<?php
$I->seeOrphanEvent('App\MyEvent');
$I->seeOrphanEvent(new App\Events\MyEvent());
$I->seeOrphanEvent(['App\MyEvent', 'App\MyOtherEvent']);
  • param string|object|string[] $expected

seePageIsAvailable

Проверяет доступность страницы. По умолчанию проверяется текущая страница, укажите параметр $url для изменения.

<?php
$I->amOnPage('/dashboard');
$I->seePageIsAvailable();

$I->seePageIsAvailable('/dashboard'); // Same as above
  • param string|null $url

seePageNotFound

Утверждает, что текущая страница имеет код ответа 404.

seePageRedirectsTo

Переходит на страницу и проверяет, что она перенаправляет на другую.

<?php
$I->seePageRedirectsTo('/admin', '/login');
  • param string $page
  • param string $redirectsTo

seeRememberedAuthentication

Проверяет, что пользователь аутентифицирован с опцией «запомнить меня».

<?php
$I->seeRememberedAuthentication();

seeRenderedTemplate

Утверждает, что шаблон был отрисован в ответе. Это включает шаблоны, созданные с помощью наследования.

<?php
$I->seeRenderedTemplate('home.html.twig');
$I->seeRenderedTemplate('layout.html.twig');
  • param string $template

seeRequestTimeIsLessThan

Утверждает, что время выполнения запроса меньше ожидаемого.

Если страница выполнила HTTP-перенаправление, будет учтено только время последнего запроса. Вы можете изменить это поведение, сначала вызвав stopFollowingRedirects().

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

Рекомендуется установить rebootable_client на true (=значение по умолчанию), так как в противном случае это утверждение даёт ложные результаты, если вы последовательно посещаете несколько страниц или если ваш приложение выполняет перенаправление.

  • param int|float $expectedMilliseconds Ожидаемое время в миллисекундах

seeResponseCodeIs

Проверяет, что код ответа равен предоставленному значению.

<?php
$I->seeResponseCodeIs(200);

// recommended \Codeception\Util\HttpCode
$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK);
  • param int $code

seeResponseCodeIsBetween

Проверяет, что код ответа находится в определённом диапазоне. Между фактически означает [от <= CODE <= до]

  • param int $from
  • param int $to

seeResponseCodeIsClientError

Проверяет, что код ответа 4xx

seeResponseCodeIsRedirection

Проверяет, что код ответа 3xx

seeResponseCodeIsServerError

Проверяет, что код ответа 5xx

seeResponseCodeIsSuccessful

Проверяет, что код ответа 2xx

seeSessionHasValues

Утверждает, что сессия содержит заданный список значений.

<?php
$I->seeSessionHasValues(['key1', 'key2']);
$I->seeSessionHasValues(['key1' => 'value1', 'key2' => 'value2']);
  • param array $bindings

seeUserHasRole

Проверяет, что текущий пользователь имеет роль

<?php
$I->seeUserHasRole('ROLE_ADMIN');
  • param string $role

seeUserHasRoles

Проверяет, что текущий пользователь имеет несколько ролей

<?php
$I->seeUserHasRoles(['ROLE_USER', 'ROLE_ADMIN']);
  • param string[] $roles

seeUserPasswordDoesNotNeedRehash

Проверяет, что пароль пользователя не нуждается в перехешировании. Если пользователь не задан, он берётся из текущей сессии.

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

<?php
$I->seeUserPasswordDoesNotNeedRehash();
$I->seeUserPasswordDoesNotNeedRehash($user);
  • param UserInterface|null $user

selectOption

Выбирает опцию в теге select или в группе радиокнопок.

<?php
$I->selectOption('form select[name=account]', 'Premium');
$I->selectOption('form input[name=payment]', 'Monthly');
$I->selectOption('//form/select[@name=account]', 'Monthly');
?>

Укажите массив для второго аргумента, чтобы выбрать несколько опций:

<?php
$I->selectOption('Which OS do you use?', array('Windows','Linux'));
?>

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

<?php
$I->selectOption('Which OS do you use?', array('text' => 'Windows')); // Only search by text 'Windows'
$I->selectOption('Which OS do you use?', array('value' => 'windows')); // Only search by value 'windows'
?>
  • param $select
  • param $option

sendAjaxGetRequest

Отправляет ajax GET-запрос с указанными параметрами. См. sendAjaxPostRequest()

  • param $uri
  • param $params

sendAjaxPostRequest

Отправляет ajax POST-запрос с указанными параметрами. Соответствующий HTTP-заголовок добавляется автоматически: X-Requested-With: XMLHttpRequest Пример:

<?php
$I->sendAjaxPostRequest('/add-task', ['task' => 'lorem ipsum']);

Некоторые фреймворки (например, Symfony) создают имена полей в виде «массива»: <input type="text" name="form[task]"> В этом случае вам необходимо передавать поля следующим образом:

<?php
$I->sendAjaxPostRequest('/add-task', ['form' => [
    'task' => 'lorem ipsum',
    'category' => 'miscellaneous',
]]);
  • param string $uri
  • param array $params

sendAjaxRequest

Отправляет ajax-запрос с использованием указанного HTTP-метода. См. sendAjaxPostRequest() Пример:

<?php
$I->sendAjaxRequest('PUT', '/posts/7', ['title' => 'new title']);
  • param $method
  • param $uri
  • param array $params

setCookie

Устанавливает cookie с заданным именем и значением. Вы можете установить дополнительные параметры cookie, такие как domain, path, expires, secure в массиве, переданном в качестве последнего аргумента.

<?php
$I->setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3');
?>
  • param $name
  • param $val
  • param array $params

setMaxRedirects

Устанавливает максимальное количество перенаправлений, которые может следовать клиент.

<?php
$I->setMaxRedirects(2);
  • param int $maxRedirects

setServerParameters

Устанавливает параметры SERVER, действительные для всех последующих запросов. Это удалит старые.

$I->setServerParameters([]);

startFollowingRedirects

Включает автоматическое следование перенаправлениям клиентом.

<?php
$I->startFollowingRedirects();

stopFollowingRedirects

Запрещает автоматическое следование перенаправлениям клиентом.

<?php
$I->stopFollowingRedirects();

submitForm

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

Хотя эта функция может использоваться в качестве сокращённого варианта fillField(), selectOption(), click() и т.д., у неё есть некоторые важные различия:

  • Можно использовать только имена полей, а не CSS/XPath-селекторы или метки полей
  • Если поле передано в эту функцию и его нет на странице, оно будет молча добавлено к HTTP-запросу. Это полезно для тестирования некоторых типов форм, но будьте внимательны: вы не получите исключение, как если бы вы вызвали fillField() или selectOption() с отсутствующим полем.

Поля, которые не предоставлены, будут заполнены их значениями со страницы или из предыдущих вызовов fillField(), selectOption() и т.д. Вам не нужно нажимать кнопку «Отправить» после этого. Эта команда сама инициирует запрос к действию формы.

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

Примеры:

<?php
$I->submitForm('#login', [
    'login' => 'davert',
    'password' => '123456'
]);
// or
$I->submitForm('#login', [
    'login' => 'davert',
    'password' => '123456'
], 'submitButtonName');

Например, предположим, у нас есть следующая форма «Регистрация»:

<form id="userForm">
    Login:
    <input type="text" name="user[login]" /><br/>
    Password:
    <input type="password" name="user[password]" /><br/>
    Do you agree to our terms?
    <input type="checkbox" name="user[agree]" /><br/>
    Subscribe to our newsletter?
    <input type="checkbox" name="user[newsletter]" value="1" checked="checked" /><br/>
    Select pricing plan:
    <select name="plan">
        <option value="1">Free</option>
        <option value="2" selected="selected">Paid</option>
    </select>
    <input type="submit" name="submitButton" value="Submit" />
</form>

Вы можете написать следующее, чтобы отправить её:

<?php
$I->submitForm(
    '#userForm',
    [
        'user' => [
            'login' => 'Davert',
            'password' => '123456',
            'agree' => true
        ]
    ],
    'submitButton'
);

Обратите внимание, что «2» будет отправленным значением для поля «plan», поскольку это выбранная опция.

Чтобы снять отметку с предварительно отмеченного чекбокса «newsletter», вызовите $I->uncheckOption(['name' => 'user[newsletter]']); до, а затем отправьте форму, как показано здесь (т.е. без поля «newsletter» в массиве $params).

Вы также можете смоделировать отправку JavaScript, не указывая никаких кнопок в третьем параметре submitForm.

<?php
$I->submitForm(
    '#userForm',
    [
        'user' => [
            'login' => 'Davert',
            'password' => '123456',
            'agree' => true
        ]
    ]
);

Эта функция хорошо сочетается с seeInFormFields() для быстрого тестирования интерфейсов CRUD и логики валидации форм.

<?php
$form = [
     'field1' => 'value',
     'field2' => 'another value',
     'checkbox1' => true,
     // ...
];
$I->submitForm('#my-form', $form, 'submitButton');
// $I->amOnPage('/path/to/form-page') may be needed
$I->seeInFormFields('#my-form', $form);

Значения параметров могут быть установлены в массивы для нескольких полей ввода с одинаковым именем или многовыборных выпадающих списков. Для флажков вы можете использовать либо строковое значение, либо логические значения true/false, которые будут заменены значением флажка в DOM.

<?php
$I->submitForm('#my-form', [
     'field1' => 'value',
     'checkbox' => [
         'value of first checkbox',
         'value of second checkbox',
     ],
     'otherCheckboxes' => [
         true,
         false,
         false
     ],
     'multiselect' => [
         'first option value',
         'second option value'
     ]
]);

Смешивание строковых и логических значений для значения флажка не поддерживается и может привести к непредсказуемым результатам.

Имена полей, заканчивающиеся на [] , должны передаваться без заключительных квадратных скобок и должны содержать массив в качестве своего значения. Это позволяет отправлять несколько значений с одинаковым именем, рассмотрите пример:

<?php
// This will NOT work correctly
$I->submitForm('#my-form', [
    'field[]' => 'value',
    'field[]' => 'another value',  // 'field[]' is already a defined key
]);

Решение заключается в передаче массива значений:

<?php
// This way both values are submitted
$I->submitForm('#my-form', [
    'field' => [
        'value',
        'another value',
    ]
]);
  • param $selector
  • param $params
  • param $button

submitSymfonyForm

Отправляет форму, указывая имя формы только один раз.

Используйте эту функцию вместо $I->submitForm(), чтобы избежать повторения имени формы в селекторах полей. Если вы настраивали имена селекторов полей, используйте $I->submitForm() для полного управления.

<?php
$I->submitSymfonyForm('login_form', [
    '[email]'    => 'john_doe@example.com',
    '[password]' => 'secretForest'
]);
  • param string $name Атрибут name формы <form> (вы не можете использовать массив в качестве селектора здесь)
  • param string[] $fields

switchToIframe

Переключается на iframe или фрейм на странице.

Пример:

<iframe name="another_frame" src="http://example.com">
<?php
# switch to iframe
$I->switchToIframe("another_frame");
  • param string $name

uncheckOption

Снимает отметку с чекбокса.

<?php
$I->uncheckOption('#notify');
?>
  • param $option

unpersistService

Удаляет сервис $serviceName из списка постоянных сервисов.

  • [Part] services
  • param string $serviceName

© 2011 Michael Bodnarchuk and contributors
Licensed under the MIT License.
https://codeception.com/docs/modules/Symfony

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API