Makale boyunca test süreçleri için en güncel birim testleri kütüphanesi "pest" tercih edilmiştir.

Testlerin Oluşturulması

Bir Dusk testi oluşturmak için dusk:make Artisan komutunu kullanın. Oluşturulan test tests/Browser dizinine yerleştirilecektir:

php artisan dusk:make LoginTest
Her Testten Sonra Veritabanını Sıfırlama

Yazdığınız testlerin çoğu, uygulamanızın veritabanından veri alan sayfalarla etkileşime girecektir; ancak Dusk testleriniz asla RefreshDatabase özelliğini kullanmamalıdır. RefreshDatabase özelliği, HTTP istekleri arasında geçerli olmayacak veya kullanılamayacak veritabanı işlemlerinden yararlanır. Bunun yerine, iki seçeneğiniz vardır: DatabaseMigrations özelliği ve DatabaseTruncation özelliği.

Veritabanı Göçlerini Kullanma (Migrations)

DatabaseMigrations özelliği her testten önce veritabanı geçişlerinizi çalıştıracaktır. Ancak, her test için veritabanı tablolarınızı bırakıp yeniden oluşturmak genellikle tabloları kesmekten daha yavaştır:

<?php

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;

uses(DatabaseMigrations::class);

//
Veritabanı Kesmeyi Kullanma (Truncation)

DatabaseTruncation özelliği, veritabanı tablolarınızın düzgün bir şekilde oluşturulduğundan emin olmak için ilk testte veritabanınızı taşıyacaktır. Ancak, sonraki testlerde, veritabanının tabloları basitçe kesilecektir - tüm veritabanı taşımalarınızı yeniden çalıştırmaya göre hız artışı sağlayacaktır:

<?php

use Illuminate\Foundation\Testing\DatabaseTruncation;
use Laravel\Dusk\Browser;

uses(DatabaseTruncation::class);

//
Varsayılan olarak, bu özellik, migrations tablosu hariç tüm tabloları kesecektir. Kesilmesi gereken tabloları özelleştirmek isterseniz, test sınıfınızda bir $tablesToTruncate özelliği tanımlayabilirsiniz:

/**
 * Indicates which tables should be truncated.
 *
 * @var array
 */
protected $tablesToTruncate = ['users'];
Alternatif olarak, hangi tabloların kesilmeden hariç tutulacağını belirtmek için test sınıfınızda bir $exceptTables özelliği tanımlayabilirsiniz:

/**
 * Indicates which tables should be excluded from truncation.
 *
 * @var array
 */
protected $exceptTables = ['users'];
Tabloları kesilecek veritabanı bağlantılarını belirtmek için test sınıfınızda $connectionsToTruncate özelliğini tanımlayabilirsiniz:

/**
 * Indicates which connections should have their tables truncated.
 *
 * @var array
 */
protected $connectionsToTruncate = ['mysql'];
Veritabanı kesilmesi gerçekleştirilmeden önce veya sonra kod çalıştırmak istiyorsanız, test sınıfınızda beforeTruncatingDatabase veya afterTruncatingDatabase yöntemlerini tanımlayabilirsiniz:

/**
 * Perform any work that should take place before the database has started truncating.
 */
protected function beforeTruncatingDatabase(): void
{
    //
}

/**
 * Perform any work that should take place after the database has finished truncating.
 */
protected function afterTruncatingDatabase(): void
{
    //
}
Testleri Çalıştırma

Tarayıcınızın testlerini çalıştırmak için dusk Artisan komutunu çalıştırın:

php artisan dusk
Eğer dusk komutunu en son çalıştırdığınızda test başarısızlıkları yaşadıysanız, dusk:fails komutunu kullanarak başarısız testleri yeniden çalıştırarak zaman kazanabilirsiniz:

Alacakaranlık komutu, Pest / PHPUnit test çalıştırıcısı tarafından normalde kabul edilen herhangi bir argümanı kabul eder, örneğin yalnızca belirli bir grup için testleri çalıştırmanıza izin verir:

php artisan dusk --group=foo
ChromeDriver'ı Manuel Olarak Başlatma

Varsayılan olarak, Dusk otomatik olarak ChromeDriver'ı başlatmayı dener. Bu sizin özel sisteminiz için işe yaramazsa, dusk komutunu çalıştırmadan önce ChromeDriver'ı manuel olarak başlatabilirsiniz. ChromeDriver'ı manuel olarak başlatmayı seçerseniz, tests/DuskTestCase.php dosyanızın şu satırını yorum satırı haline getirmelisiniz:

/**
 * Prepare for Dusk test execution.
 *
 * @beforeClass
 */
public static function prepare(): void
{
    // static::startChromeDriver();
}
Ayrıca, ChromeDriver'ı 9515 dışındaki bir portta başlatırsanız, aynı sınıfın sürücü yöntemini doğru portu yansıtacak şekilde değiştirmelisiniz:

use Facebook\WebDriver\Remote\RemoteWebDriver;

/**
 * Create the RemoteWebDriver instance.
 */
protected function driver(): RemoteWebDriver
{
    return RemoteWebDriver::create(
        'http://localhost:9515', DesiredCapabilities::chrome()
    );
}
Çevre (Environment) Yönetimi

Testleri çalıştırırken Dusk'ın kendi ortam dosyasını kullanmasını zorlamak için projenizin kökünde bir .env.dusk.{environment} dosyası oluşturun. Örneğin, dusk komutunu yerel ortamınızdan başlatacaksanız bir .env.dusk.local dosyası oluşturmalısınız. Testleri çalıştırırken, Dusk .env dosyanızı yedekleyecek ve Dusk ortamınızın adını .env olarak değiştirecektir. Testler tamamlandıktan sonra, .env dosyanız geri yüklenecektir.