Тестирование ответов
Класс TestResponse предоставляет ряд полезных функций для разбора и тестирования ответов из ваших тестовых случаев. Обычно TestResponse предоставляется в результате ваших Тестов контроллеров или Тестов функций HTTP, но вы всегда можете создать свой собственный, используя любой ResponseInterface:
$result = new \CodeIgniter\Test\TestResponse($response); $result->assertOK();
Тестирование ответа
Независимо от того, получили ли вы TestResponse в результате своих тестов или создали его самостоятельно, существует ряд новых утверждений, которые вы можете использовать в своих тестах.
Доступ к запросу/ответу
request()
Вы можете напрямую получить доступ к объекту Request, если он был установлен во время тестирования:
$request = $results->request();
response()
Это позволяет вам получить прямой доступ к объекту ответа:
$response = $results->response();
Проверка статуса ответа
isOK()
Возвращает булево значение true/false в зависимости от того, считается ли ответ «хорошим». Это в первую очередь определяется кодом состояния ответа в диапазонах 200 или 300.
if ($result->isOK()) {
...
}
assertOK()
Это утверждение просто использует метод isOK() для проверки ответа. assertNotOK является обратным этим утверждением.
$result->assertOK();
isRedirect()
Возвращает булево значение true/false в зависимости от того, является ли ответ перенаправлением.
if ($result->isRedirect()) {
...
}
assertRedirect()
Утверждает, что ответ является экземпляром RedirectResponse. assertNotRedirect является обратным этим утверждением.
$result->assertRedirect();
assertRedirectTo()
Утверждает, что ответ является экземпляром RedirectResponse, и пункт назначения соответствует заданному URI.
$result->assertRedirectTo('foo/bar');
getRedirectUrl()
Возвращает URL, установленный для RedirectResponse, или null при ошибке.
$url = $result->getRedirectUrl();
$this->assertEquals(site_url('foo/bar'), $url);
assertStatus(int $code)
Утверждает, что возвращаемый код HTTP-статуса соответствует $code.
$result->assertStatus(403);
Утверждения сессии
assertSessionHas(string $key, $value = null)
Утверждает, что значение существует в результирующей сессии. Если $value передается, также утверждает, что значение переменной соответствует указанному значению.
$result->assertSessionHas('logged_in', 123);
assertSessionMissing(string $key)
Утверждает, что результирующая сессия не включает указанный $key.
$result->assertSessionMissin('logged_in');
Утверждения заголовков
assertHeader(string $key, $value = null)
Утверждает, что заголовок с именем $key существует в ответе. Если $value не пусто, также утверждает, что значения совпадают.
$result->assertHeader('Content-Type', 'text/html');
assertHeaderMissing(string $key)
Утверждает, что заголовок с именем $key не существует в ответе.
$result->assertHeader('Accepts');
Утверждения cookie
assertCookie(string $key, $value = null, string $prefix = ‘’)
Утверждает, что cookie с именем $key существует в ответе. Если $value не пусто, также утверждает, что значения совпадают. Вы можете установить префикс cookie, если нужно, передав его в качестве третьего параметра.
$result->assertCookie('foo', 'bar');
assertCookieMissing(string $key)
Утверждает, что cookie с именем $key не существует в ответе.
$result->assertCookieMissing('ci_session');
assertCookieExpired(string $key, string $prefix = ‘’)
Утверждает, что cookie с именем $key существует, но истек срок его действия. Вы можете установить префикс cookie, если нужно, передав его во второй параметр.
$result->assertCookieExpired('foo');
Помощники DOM
Полученный вами ответ содержит ряд вспомогательных методов для проверки HTML-вывода в ответе. Они полезны для использования в утверждениях в ваших тестах.
Метод see() проверяет текст на странице, чтобы убедиться, что он существует либо сам по себе, либо более конкретно внутри тега, как указано типом, классом или id:
// Check that "Hello World" is on the page
$results->see('Hello World');
// Check that "Hello World" is within an h1 tag
$results->see('Hello World', 'h1');
// Check that "Hello World" is within an element with the "notice" class
$results->see('Hello World', '.notice');
// Check that "Hello World" is within an element with id of "title"
$results->see('Hellow World', '#title');
Метод dontSee() является точной противоположностью:
// Checks that "Hello World" does NOT exist on the page
$results->dontSee('Hello World');
// Checks that "Hellow World" does NOT exist within any h1 tag
$results->dontSee('Hello World', 'h1');
Методы seeElement() и dontSeeElement() очень похожи на предыдущие методы, но не проверяют значения элементов. Вместо этого они просто проверяют, что элементы существуют на странице:
// Check that an element with class 'notice' exists
$results->seeElement('.notice');
// Check that an element with id 'title' exists
$results->seeElement('#title')
// Verify that an element with id 'title' does NOT exist
$results->dontSeeElement('#title');
Вы можете использовать seeLink(), чтобы убедиться, что ссылка с указанным текстом отображается на странице:
// Check that a link exists with 'Upgrade Account' as the text::
$results->seeLink('Upgrade Account');
// Check that a link exists with 'Upgrade Account' as the text, AND a class of 'upsell'
$results->seeLink('Upgrade Account', '.upsell');
Метод seeInField() проверяет, существуют ли теги input с заданным именем и значением:
// Check that an input exists named 'user' with the value 'John Snow'
$results->seeInField('user', 'John Snow');
// Check a multi-dimensional input
$results->seeInField('user[name]', 'John Snow');
Наконец, вы можете проверить, существует ли флажок и установлен ли он с помощью метода seeCheckboxIsChecked():
// Check if checkbox is checked with class of 'foo'
$results->seeCheckboxIsChecked('.foo');
// Check if checkbox with id of 'bar' is checked
$results->seeCheckboxIsChecked('#bar');
Утверждения DOM
Вы можете выполнить проверки, чтобы увидеть, существуют ли на странице конкретные элементы/тексты и т. д. с помощью следующих утверждений.
assertSee(string $search = null, string $element = null)
Утверждает, что текст/HTML находится на странице, либо сам по себе, либо более конкретно — внутри тега, как указано типом, классом или id:
// Check that "Hello World" is on the page
$result->assertSee('Hello World');
// Check that "Hello World" is within an h1 tag
$result->assertSee('Hello World', 'h1');
// Check that "Hello World" is within an element with the "notice" class
$result->assertSee('Hello World', '.notice');
// Check that "Hello World" is within an element with id of "title"
$result->assertSee('Hellow World', '#title');
assertDontSee(string $search = null, string $element = null)
Утверждает точное обратное методу assertSee():
// Checks that "Hello World" does NOT exist on the page
$results->dontSee('Hello World');
// Checks that "Hello World" does NOT exist within any h1 tag
$results->dontSee('Hello World', 'h1');
assertSeeElement(string $search)
Аналогично assertSee(), но проверяет только наличие элемента. Не проверяет конкретный текст:
// Check that an element with class 'notice' exists
$results->seeElement('.notice');
// Check that an element with id 'title' exists
$results->seeElement('#title')
assertDontSeeElement(string $search)
Аналогично assertSee(), но проверяет только отсутствие элемента. Не проверяет конкретный текст:
// Verify that an element with id 'title' does NOT exist
$results->dontSeeElement('#title');
assertSeeLink(string $text, string $details=null)
Утверждает, что тег anchor найден с совпадающим $text в теле тега:
// Check that a link exists with 'Upgrade Account' as the text::
$results->seeLink('Upgrade Account');
// Check that a link exists with 'Upgrade Account' as the text, AND a class of 'upsell'
$results->seeLink('Upgrade Account', '.upsell');
assertSeeInField(string $field, string $value=null)
Утверждает, что тег input существует с указанным именем и значением:
// Check that an input exists named 'user' with the value 'John Snow'
$results->assertSeeInField('user', 'John Snow');
// Check a multi-dimensional input
$results->assertSeeInField('user[name]', 'John Snow');
Работа с JSON
Ответы часто содержат JSON-ответы, особенно при работе с методами API. Следующие методы помогут проверить ответы.
getJSON()
Этот метод вернет тело ответа в виде JSON-строки:
// Response body is this:
['foo' => 'bar']
$json = $result->getJSON();
// $json is this:
{
"foo": "bar"
}
Вы можете использовать этот метод, чтобы определить, содержит ли $response фактически JSON-контент:
// Verify the response is JSON $this->assertTrue($result->getJSON() !== false)
Примечание
Обратите внимание, что JSON-строка будет отформатирована с помощью отступов в результате.
assertJSONFragment(array $fragment)
Утверждает, что $fragment найден в JSON-ответе. Он не должен совпадать со всем JSON-значением.
// Response body is this:
[
'config' => ['key-a', 'key-b'],
]
// Is true
$result->assertJSONFragment(['config' => ['key-a']]);
assertJSONExact($test)
Аналогично assertJSONFragment(), но проверяет весь JSON-ответ, чтобы убедиться в точном соответствии.
Работа с XML
getXML()
Если ваше приложение возвращает XML, вы можете получить его с помощью этого метода.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/testing/response.html