Spec-Zone.ru › Codeception

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 &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 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&#95;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 &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

Проверяет, что в базе данных найдено заданное количество записей. Вы можете передать имя таблицы базы данных или имя класса 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

Spec-Zone.ru

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