Метод assertSeeText
Метод assertSeeText применяется к объекту тестового ответа
и проверяет, что указанная строка присутствует в теле ответа.
При этом все HTML-теги удаляются, а множественные пробелы
схлопываются в один. Это позволяет проверять наличие текста
независимо от его форматирования. Первым параметром
передаётся искомая строка.
Синтаксис
<?php
$response->assertSeeText($text);
?>
Пример
Давайте проверим, что страница содержит текст
'Welcome to our website', который может быть
обёрнут в разные HTML-теги:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class WelcomePageTest extends TestCase
{
public function test_welcome_text_is_present()
{
$res = $this->get('/');
$res->assertSeeText('Welcome to our website');
}
}
?>
Если на странице есть код <h1>Welcome to our website</h1>,
то проверка пройдёт успешно.
Пример
Метод игнорирует множественные пробелы и переносы строк. Проверим наличие текста с лишними пробелами:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticlePageTest extends TestCase
{
public function test_article_content_is_present()
{
$res = $this->get('/article/1');
$res->assertSeeText('Laravel is a great framework');
}
}
?>
Если страница содержит HTML
<p>Laravel is a great framework</p>,
то проверка также будет успешной.
Пример
Метод можно использовать для проверки содержимого динамических страниц, например, приветствия пользователя:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class UserDashboardTest extends TestCase
{
public function test_dashboard_shows_username()
{
$user = User::factory()->create([
'name' => 'John Doe'
]);
$res = $this->actingAs($user)->get('/dashboard');
$res->assertSeeText('John Doe');
}
}
?>
В данном примере мы проверяем, что после авторизации на странице отображается имя пользователя.
Пример
Метод чувствителен к регистру. Для проверки без учёта регистра нужно преобразовать строки:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ProductPageTest extends TestCase
{
public function test_product_name_case_insensitive()
{
$res = $this->get('/product/1');
$text = 'PRODUCT NAME';
$res->assertSeeText($text, false);
// Или через преобразование
$pageText = strip_tags($res->getContent());
$this->assertStringContainsString(
strtolower('Product Name'),
strtolower($pageText)
);
}
}
?>
Вторым параметром можно передать false для
отключения чувствительности к регистру.
Пример
Проверим отсутствие текста на странице с помощью
метода assertDontSeeText:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class AdminPanelTest extends TestCase
{
public function test_admin_text_is_hidden_for_guests()
{
$res = $this->get('/admin');
$res->assertDontSeeText('Admin Panel');
}
public function test_admin_text_is_visible_for_admins()
{
$user = User::factory()->create([
'is_admin' => true
]);
$res = $this->actingAs($user)->get('/admin');
$res->assertSeeText('Admin Panel');
}
}
?>
Результат выполнения кода:
"OK (2 tests)"
Смотрите также
-
метод
assertSee,
который проверяет наличие HTML-кода без очистки тегов -
метод
assertDontSee,
который проверяет отсутствие HTML-кода без очистки тегов -
метод
assertStatus,
который проверяет код HTTP-ответа -
метод
assertViewIs,
который проверяет используемый шаблон