Skip to content

Laravel Dusk

Nguồn gốc: Bản dịch từ Laravel Dusk

GỢI Ý

Pest 4 giờ đã tích hợp automated browser testing với hiệu năng và trải nghiệm tốt hơn đáng kể. Với dự án mới, khuyến nghị dùng Pest cho browser testing.

Giới thiệu (Introduction)

Laravel Dusk cung cấp API browser automation và testing biểu cảm, dễ sử dụng. Mặc định Dusk không yêu cầu JDK hoặc Selenium — dùng ChromeDriver standalone.

Cài đặt (Installation)

Yêu cầu: Google Chrome đã cài.

bash
composer require laravel/dusk --dev
bash
php artisan dusk:install

Lệnh trên tạo thư mục tests/Browser, test mẫu, và cài Chrome Driver binary.

Đặt APP_URL trong .env khớp với URL truy cập ứng dụng.

Quản lý ChromeDriver

bash
php artisan dusk:chrome-driver

Sử dụng Browser khác

Dusk hỗ trợ bất kỳ driver tương thích Selenium.

Bắt đầu (Getting Started)

Tạo Tests

bash
php artisan dusk:make LoginTest

Reset Database sau mỗi Test

Dùng trait DatabaseMigrationskhông dùng RefreshDatabase vì Dusk chạy process riêng biệt.

Chạy Tests

bash
php artisan dusk

Chạy test cụ thể:

bash
php artisan dusk --filter=LoginTest

Environment Handling

Dusk sử dụng file .env.dusk.{environment} khi chạy.

Browser Basics

Tạo Browsers

php
$this->browse(function (Browser $browser) {
    $browser->visit('/login')
            ->type('email', 'taylor@laravel.com')
            ->type('password', 'password')
            ->press('Login')
            ->assertPathIs('/home');
});

Multiple Browsers

Test với nhiều browser cùng lúc (testing real-time features).

php
$browser->visit('/login');
$browser->visitRoute('login');
$browser->back();
$browser->forward();
$browser->refresh();

Authentication

php
$user = User::factory()->create();

$this->browse(function (Browser $browser) use ($user) {
    $browser->loginAs($user)
            ->visit('/home');
});

Cookies

php
$browser->cookie('name');
$browser->cookie('name', 'Taylor');
$browser->deleteCookie('name');

Taking a Screenshot

php
$browser->screenshot('filename');

Tương tác với Elements

Dusk Selectors

Dùng attribute dusk thay vì CSS selector dễ thay đổi:

html
<button dusk="login-button">Login</button>
php
$browser->click('@login-button');

Interacting With Forms

php
$browser->type('email', 'taylor@laravel.com');
$browser->select('size', 'Large');
$browser->check('terms');
$browser->radio('plan', 'monthly');
$browser->attach('photo', __DIR__.'/photos/me.jpg');
php
$browser->clickLink('Sign Up');
$browser->press('Login');

Waiting for Elements

php
$browser->waitFor('.selector');
$browser->waitForText('Hello World');
$browser->waitUntilMissing('.selector');
$browser->waitForLocation('/dashboard');

Available Assertions

Dusk cung cấp nhiều assertion phong phú:

MethodMô tả
assertTitle($title)Title trang khớp
assertTitleContains($text)Title chứa text
assertUrlIs($url)URL khớp
assertPathIs($path)Path khớp
assertSee($text)Text hiển thị trên trang
assertDontSee($text)Text không hiển thị
assertSeeIn($selector, $text)Text hiển thị trong selector
assertValue($selector, $value)Input có giá trị
assertChecked($field)Checkbox checked
assertNotChecked($field)Checkbox unchecked
assertSelected($field, $value)Select có giá trị
assertEnabled($field)Field enabled
assertDisabled($field)Field disabled
assertVisible($selector)Element visible
assertMissing($selector)Element missing
assertAuthenticated()User đã xác thực
assertGuest()User chưa xác thực

Pages

Page objects cho phép tổ chức selector và action phức tạp thành class.

bash
php artisan dusk:page LoginPage

Components

Tái sử dụng component (date picker, dropdown...) trên nhiều test.

bash
php artisan dusk:component DatePicker

Continuous Integration

Dusk hỗ trợ CI trên: Heroku CI, Travis CI, GitHub Actions, Chipper CI.