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 & 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_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 & 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