Laravel
Установка
Если вы используете Codeception, установленный через composer, установите этот модуль следующей командой:
composer require --dev codeception/module-laravel
В качестве альтернативы, вы можете включить Laravel модуль в файле конфигурации набора тестов и выполнить
codecept init upgrade4
Этот модуль был включён в Codeception 2 и 3, но с версии 4 его необходимо устанавливать отдельно.
Некоторые модули поставляются с файлами PHAR.
Предупреждение. Использование файла PHAR и composer в одном проекте может привести к неожиданным ошибкам.
Описание
Этот модуль позволяет запускать функциональные тесты для Laravel 6.0+. Его не следует использовать для приёмочных тестов. Подробности см. в разделе Приёмочные тесты ниже.
Демо-проект
https://github.com/Codeception/laravel-module-tests
Настройка
- cleanup:
boolean, по умолчаниюtrue- все запросы к базе данных будут выполняться в транзакции, которая будет отменена в конце каждого теста. - run_database_migrations:
boolean, по умолчаниюfalse- выполнить миграции базы данных перед каждым тестом. - database_migrations_path:
string, по умолчаниюnull- путь к миграциям базы данных, относительно корня приложения. - run_database_seeder:
boolean, по умолчаниюfalse- выполнить сидер базы данных перед каждым тестом. - database_seeder_class:
string, по умолчанию `` - имя класса сидера базы данных. - environment_file:
string, по умолчанию.env- файл окружения для загрузки тестов. - bootstrap:
string, по умолчаниюbootstrap/app.php- относительный путь к файлу конфигурации app.php. - root:
string, по умолчанию `` - корневой путь приложения. - packages:
string, по умолчаниюworkbench- корневой путь пакетов приложения (если есть). - vendor_dir:
string, по умолчаниюvendor- необязательный относительный путь к каталогу vendor. - disable_exception_handling:
boolean, по умолчаниюtrue- отключить обработку исключений Laravel. - disable_middleware:
boolean, по умолчаниюfalse- отключить все middleware. - disable_events:
boolean, по умолчаниюfalse- отключить события (не отключает события модели). - disable_model_events:
boolean, по умолчаниюfalse- отключить события модели. - url:
string, по умолчанию `` - URL приложения.
Пример #1 (functional.suite.yml)
Включение модуля:
yml
modules:
enabled:
- Laravel Пример #2 (functional.suite.yml)
Включение модуля с пользовательским файлом .env
yml
modules:
enabled:
- Laravel:
environment_file: .env.testing API
- app -
Illuminate\Foundation\Application - config -
array
Компоненты
-
ORM: Включить только методы базы данных этого модуля:- dontSeeRecord
- grabNumRecords
- grabRecord
- have
- haveMultiple
- haveRecord
- make
- makeMultiple
- seedDatabase
- seeNumRecords
- seeRecord
См. модуль WebDriver для общей информации о загрузке компонентов модуля фреймворка.
Приёмочные тесты
Не следует использовать этот модуль для приёмочных тестов. Если вы хотите использовать Eloquent в приёмочных тестах (в паре с WebDriver), включите только часть ORM этого модуля:
Пример (acceptance.suite.yml)
modules:
enabled:
- WebDriver:
browser: chrome
url: http://127.0.0.1:8000
- Laravel:
part: ORM
environment_file: .env.testing Действия
_findElements
скрытый метод API, ожидается, что он будет использоваться классами-помощниками
Находит элемент, используя доступные типы локализации Codeception:
- XPath
- CSS
- Строгая локализация
Используйте его в классах-помощниках или классах GroupObject или Extension:
<?php
$els = $this->getModule('Laravel')->_findElements('.items');
$els = $this->getModule('Laravel')->_findElements(['name' => 'username']);
$editLinks = $this->getModule('Laravel')->_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('Laravel')->_getResponseContent(), "response contains");
} -
return string@throws ModuleException
_loadPage
скрытый метод API, ожидается, что он будет использоваться классами-помощниками
Открывает страницу с произвольными параметрами запроса. Полезно для тестирования многошаговых форм на определённом шаге.
<?php
// in Helper class
public function openCheckoutFormStep2($orderId) {
$this->getModule('Laravel')->_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('Laravel')->_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('Laravel')->_savePageSource(codecept_output_dir().'page.html'); -
param$filename
amActingAs
Устанавливает заданный объект пользователя для текущего или указанного Guard.
<?php $I->amActingAs($user);
amHttpAuthenticated
Авторизует пользователя для HTTP_AUTH
-
param string$username -
param string$password
amLoggedAs
Устанавливает текущего вошедшего пользователя для приложения. В отличие от «amActingAs», этот метод обновляет сессию, вызывает события входа в систему и запоминает пользователя, поскольку он назначает соответствующий Cookie.
<?php // provide array of credentials $I->amLoggedAs(['username' => 'jane@example.com', 'password' => 'password']); // provide User object that implements the User interface $I->amLoggedAs( new User ); // can be verified with $I->seeAuthentication();
-
param Authenticatable|array$user -
param string|null$guardName
amOnAction
Открывает веб-страницу по имени действия
<?php
// Laravel 6 or 7:
$I->amOnAction('PostsController@index');
// Laravel 8+:
$I->amOnAction(PostsController::class . '@index'); -
param string$action -
param mixed$parameters
amOnPage
Открывает страницу для данного относительного URI.
<?php
// opens front page
$I->amOnPage('/');
// opens /register page
$I->amOnPage('/register'); -
param string$page
amOnRoute
Открывает веб-страницу, используя имя маршрута и параметры.
<?php
$I->amOnRoute('posts.create'); -
param string$routeName -
param mixed$params
assertAuthenticatedAs
Проверить, что пользователь аутентифицирован как указанный пользователь.
<?php $I->assertAuthenticatedAs($user);
assertCredentials
Проверить, что предоставленные учётные данные являются допустимыми.
<?php
$I->assertCredentials([
'email' => 'john_doe@gmail.com',
'password' => '123456'
]); assertInvalidCredentials
Проверить, что предоставленные учётные данные являются недопустимыми.
<?php
$I->assertInvalidCredentials([
'email' => 'john_doe@gmail.com',
'password' => 'wrong_password'
]); attachFile
Прикрепляет файл, относительный к каталогу Codeception _data к указанному полю загрузки файла.
<?php
// file is stored in 'tests/_data/prices.xls'
$I->attachFile('input[@type="file"]', 'prices.xls');
?> -
param$field -
param$filename
callArtisan
Вызвать команду Artisan.
<?php
$I->callArtisan('command:name');
$I->callArtisan('command:name', ['parameter' => 'value']); Используйте 3-й параметр, чтобы передать пользовательские OutputInterface
return string|void
checkOption
Поставить отметку в поле «флажок». Для радиокнопок используйте метод selectOption вместо этого.
<?php
$I->checkOption('#agree');
?> -
param$option
clearApplicationHandlers
Очистить зарегистрированные обработчики приложения.
<?php $I->clearApplicationHandlers();
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 имя заголовка для удаления.
disableEvents
Отключает события для следующих запросов. Этот метод не отключает события модели. Для отключения событий модели необходимо использовать метод disableModelEvents().
<?php $I->disableEvents();
disableExceptionHandling
Отключает обработку исключений Laravel.
<?php $I->disableExceptionHandling();
disableMiddleware
Отключает middleware для следующих запросов.
<?php $I->disableMiddleware();
-
param string|array|null$middleware
disableModelEvents
Отключает события модели для последующих запросов.
<?php $I->disableModelEvents();
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 -->
Для проверки исходного кода без HTML-тегов используйте 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
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|array$key -
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 optional
dontSeeOptionIsSelected
Проверяет, что данный вариант не выбран.
<?php
$I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa');
?> -
param$selector -
param$optionText
dontSeeRecord
Проверяет, что запись не существует в базе данных. Вы можете передать имя таблицы базы данных или имя класса Eloquent-модели в качестве первого аргумента.
<?php
$I->dontSeeRecord($user);
$I->dontSeeRecord('users', ['name' => 'Davert']);
$I->dontSeeRecord('App\Models\User', ['name' => 'Davert']); -
param string|class-string|object$table -
param array$attributes -
[Part]orm
dontSeeResponseCodeIs
Проверяет, что код ответа равен переданному значению.
<?php $I->dontSeeResponseCodeIs(200); // recommended \Codeception\Util\HttpCode $I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
-
param int$code
dontSeeSessionHasValues
Утверждает, что сессия не содержит определенного списка значений.
<?php $I->dontSeeSessionHasValues(['key1', 'key2']); $I->dontSeeSessionHasValues(['key1' => 'value1', 'key2' => 'value2']);
enableExceptionHandling
Включить обработку исключений Laravel.
<?php $I->enableExceptionHandling();
enableMiddleware
Включить указанный middleware для последующих запросов.
<?php $I->enableMiddleware();
-
param string|array|null$middleware
fillField
Заполняет текстовое поле или текстовую область заданной строкой.
<?php
$I->fillField("//input[@type='text']", "Hello World!");
$I->fillField(['name' => 'email'], 'jon@example.com');
?> -
param$field -
param$value
flushSession
Очистить все данные текущей сессии.
<?php $I->flushSession();
followRedirect
Следовать ожидаемому редиректу, если он есть.
<?php $I->followRedirect();
getApplication
Предоставляет доступ к объекту приложения Laravel.
<?php $app = $I->getApplication();
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 optional
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
Возвращает количество записей из базы данных. Вы можете передать имя таблицы базы данных или имя класса Eloquent-модели в качестве первого аргумента.
<?php
$I->grabNumRecords('users', ['name' => 'Davert']);
$I->grabNumRecords('App\Models\User', ['name' => 'Davert']); -
[Part]orm
grabPageSource
Извлекает исходный код текущей страницы.
@throws ModuleException если страница не была открыта.
-
return stringИсходный код текущей страницы.
grabRecord
Извлекает запись из базы данных. Если вы передаете имя таблицы базы данных в качестве первого аргумента, этот метод возвращает массив. Вы также можете передать имя класса Eloquent-модели, в этом случае этот метод возвращает Eloquent-модель.
<?php
$record = $I->grabRecord('users', ['name' => 'Davert']); // returns array
$record = $I->grabRecord('App\Models\User', ['name' => 'Davert']); // returns Eloquent model -
param string$table -
param array$attributes return array|EloquentModel-
[Part]orm
grabService
Возвращает экземпляр класса из контейнера служб Laravel. (https://laravel.com/docs/7.x/container)
<?php
// In Laravel
App::bind('foo', function($app) {
return new FooBar;
});
// Then in test
$service = $I->grabService('foo');
// Will return an instance of FooBar, also works for singletons. 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
have
Используйте фабрику моделей Laravel для создания модели.
<?php
$I->have('App\Models\User');
$I->have('App\Models\User', ['name' => 'John Doe']);
$I->have('App\Models\User', [], 'admin'); @see https://laravel.com/docs/7.x/database-testing#using-factories
-
[Part]orm
haveApplicationHandler
Регистрирует обработчик, который может использоваться для изменения объекта приложения Laravel после его инициализации. Объект приложения Laravel будет передан в качестве аргумента обработчику.
<?php
$I->haveApplicationHandler(function($app) {
$app->make('config')->set(['test_value' => '10']);
}); haveBinding
Добавить привязку в контейнер сервисов Laravel. (https://laravel.com/docs/7.x/container)
<?php
$I->haveBinding('My\Interface', 'My\Implementation'); -
param string$abstract -
param Closure|string|null$concrete -
param bool$shared
haveContextualBinding
Добавить контекстуальную привязку в контейнер сервисов Laravel. (https://laravel.com/docs/7.x/container)
<?php
$I->haveContextualBinding('My\Class', '$variable', 'value');
// This is similar to the following in your Laravel application
$app->when('My\Class')
->needs('$variable')
->give('value'); -
param string$concrete -
param string$abstract -
param Closure|string$implementation
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 значение, которое нужно установить для последующих запросов
haveInSession
Установить сессию в заданный массив.
<?php $I->haveInSession(['myKey' => 'MyValue']);
haveInstance
Добавить привязку экземпляра в контейнер сервисов Laravel. (https://laravel.com/docs/7.x/container)
<?php
$I->haveInstance('App\MyClass', new App\MyClass()); haveMultiple
Используйте фабрику моделей Laravel для создания нескольких моделей.
<?php
$I->haveMultiple('App\Models\User', 10);
$I->haveMultiple('App\Models\User', 10, ['name' => 'John Doe']);
$I->haveMultiple('App\Models\User', 10, [], 'admin'); @see https://laravel.com/docs/7.x/database-testing#using-factories
return EloquentModel|EloquentCollection-
[Part]orm
haveRecord
Вставляет запись в базу данных. Если вы передаете имя таблицы базы данных в качестве первого аргумента, этот метод возвращает целое число ID. Вы также можете передать имя класса Eloquent-модели, в этом случае этот метод возвращает Eloquent-модель.
<?php
$user_id = $I->haveRecord('users', ['name' => 'Davert']); // returns integer
$user = $I->haveRecord('App\Models\User', ['name' => 'Davert']); // returns Eloquent model -
param string$table -
param array$attributes -
return EloquentModel|int@throws RuntimeException -
[Part]orm
haveServerParameter
Устанавливает параметр SERVER, действующий для всех последующих запросов.
$I->haveServerParameter('name', 'value'); -
param string$name -
param string$value
haveSingleton
Добавить привязку синглтона в контейнер сервисов Laravel. (https://laravel.com/docs/7.x/container)
<?php
$I->haveSingleton('App\MyInterface', 'App\MySingleton'); -
param string$abstract -
param Closure|string|null$concrete
logout
Выход пользователя.
<?php $I->logout();
make
Используйте фабрику моделей Laravel для создания экземпляра модели.
<?php
$I->make('App\Models\User');
$I->make('App\Models\User', ['name' => 'John Doe']);
$I->make('App\Models\User', [], 'admin'); @see https://laravel.com/docs/7.x/database-testing#using-factories
return EloquentCollection|EloquentModel-
[Part]фреймворк
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
makeMultiple
Используйте фабрику моделей Laravel для создания нескольких экземпляров моделей.
<?php
$I->makeMultiple('App\Models\User', 10);
$I->makeMultiple('App\Models\User', 10, ['name' => 'John Doe']);
$I->makeMultiple('App\Models\User', 10, [], 'admin'); @see https://laravel.com/docs/7.x/database-testing#using-factories
return EloquentCollection|EloquentModel-
[Part]фреймворк
moveBack
Перемещается назад в истории.
-
param int$numberOfSteps (значение по умолчанию 1)
resetCookie
Удаляет куки с заданным именем. Вы можете установить дополнительные параметры куки, такие как domain, path в массиве, переданном в качестве последнего аргумента.
-
param$cookie -
param array$params
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
Проверяет, соответствует ли текущий URL действию
<?php
// Laravel 6 or 7:
$I->seeCurrentActionIs('PostsController@index');
// Laravel 8+:
$I->seeCurrentActionIs(PostsController::class . '@index'); seeCurrentRouteIs
Проверяет, соответствует ли текущий URL маршруту
<?php
$I->seeCurrentRouteIs('posts.index'); 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
seeEventTriggered
Убедитесь, что события, сгенерированные во время теста.
<?php
$I->seeEventTriggered('App\MyEvent');
$I->seeEventTriggered(new App\Events\MyEvent());
$I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']); -
param string|object|string[]$expected
seeFormErrorMessage
Утверждает, что на странице отображается сообщение об ошибке формы.
Если вы хотите утверждать, что существует сообщение об ошибке формы для конкретного ключа, но не заботитесь о фактическом сообщении об ошибке, вы можете опустить $expectedErrorMessage.
Если вы передадите $expectedErrorMessage, этот метод проверяет, содержит ли фактическое сообщение об ошибке для ключа $expectedErrorMessage.
<?php
$I->seeFormErrorMessage('username');
$I->seeFormErrorMessage('username', 'Invalid Username'); seeFormErrorMessages
Проверяет, что у нескольких полей формы есть ошибки.
Этот метод проверит, содержится ли ожидаемое сообщение об ошибке в фактическом сообщении об ошибке, то есть вы можете указать либо все сообщение об ошибке, либо только его часть:
<?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
]); seeFormHasErrors
Утверждает, что ошибки формы связаны с представлением.
<?php $I->seeFormHasErrors();
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('key');
$I->seeInSession('key', 'value'); -
param string|array$key -
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
Проверяет, что в базе данных найдено заданное количество записей. Вы можете передать имя таблицы базы данных или имя класса Eloquent-модели в качестве первого аргумента.
<?php $I->seeNumRecords(1, 'users', ['name' => 'Davert']); $I->seeNumRecords(1, 'App\Models\User', ['name' => 'Davert']);
-
[Part]фреймворк
seeNumberOfElements
Проверяет, что на странице есть определённое количество элементов, соответствующих заданному локатору.
<?php
$I->seeNumberOfElements('tr', 10);
$I->seeNumberOfElements('tr', [0,10]); // between 0 and 10 elements
?> -
param$selector -
param mixed$expected (целое число или массив целых чисел)
seeOptionIsSelected
Проверяет, что заданный параметр выбран.
<?php
$I->seeOptionIsSelected('#form input[name=payment]', 'Visa');
?> -
param$selector -
param$optionText
seePageNotFound
Утверждает, что текущая страница имеет код состояния ответа 404.
seeRecord
Проверяет, существует ли запись в базе данных. Вы можете передать имя таблицы базы данных или имя класса Eloquent-модели в качестве первого аргумента.
<?php
$I->seeRecord($user);
$I->seeRecord('users', ['name' => 'Davert']);
$I->seeRecord('App\Models\User', ['name' => 'Davert']); -
param string|class-string|object$table -
param array$attributes -
[Part]фреймворк
seeResponseCodeIs
Проверяет, что код ответа равен указанному значению.
<?php $I->seeResponseCodeIs(200); // recommended \Codeception\Util\HttpCode $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK);
-
param int$code
seeResponseCodeIsBetween
Проверяет, что код ответа находится в определённом диапазоне. «Между» означает [от <= КОД <= до]
-
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']);
seedDatabase
Заполните заданное подключение к базе данных.
-
param class-string|class-string[]$seeders
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
setApplication
не документировано
setCookie
Устанавливает куки с заданным именем и значением. Вы можете установить дополнительные параметры куки, такие как domain, path, expires, secure в массиве, переданном в качестве последнего аргумента.
<?php
$I->setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3');
?> -
param$name -
param$val -
param array$params
setMaxRedirects
Устанавливает максимальное количество редиректов, которые может отследить Client.
<?php $I->setMaxRedirects(2);
-
param int$maxRedirects
setServerParameters
Устанавливает параметры SERVER, действительные для всех последующих запросов. Это удалит предыдущие.
$I->setServerParameters([]);
startFollowingRedirects
Включает автоматическое следование перенаправлениям клиентом.
<?php $I->startFollowingRedirects();
stopFollowingRedirects
Препятствует автоматическому слежению за перенаправлениями со стороны клиента.
<?php $I->stopFollowingRedirects();
submitForm
Отправляет заданную форму на странице с заданными значениями поля формы. Передайте значения поля формы в качестве массива во втором параметре.
Хотя эта функция может использоваться в качестве сокращенной версии fillField(), 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» в массиве).
Вы также можете эмулировать отправку 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
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
© 2011 Michael Bodnarchuk and contributors
Licensed under the MIT License.
https://codeception.com/docs/modules/Laravel5