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.