• 24-08-2022, 10:38:57
    #1
    Selam arkadaşlar 2 sorum olucak
    Laravel testing ile testler yazıyorum ama
    RefreshDatabase kullanıp her seferinde databaseyi sıfırlamak istediğimde database viewleri sıfırlamıyor ve xxx view zaten var gibi bir uyarı veriyor bunu nasıl halledebilirim ?
    2. sorum ise auth için test yazdığımda sistemde 2FA var ve bu kod her seferinde değişiyor. Bu kod ile beraber testi nasıl yazabilirim emin olamadım. Son kodu veritabanından çekip yapmak gibi bir çözüm geldi aklıma ama ne kadar mantıklı bilemedim.
    Yardımcı olabilirseniz sevinirim. İyi çalışmalar herkese
  • 24-08-2022, 10:48:15
    #2
    Veritabanını sıfırlamak için RefreshDatabase trait'i yerine IlluminateFoundationTestingDatabaseMigrations trait'ini kullanabilirsin. Böylece migration'ları da her defasında çalıştırır ama RefreshDatabase'e göre daha yavaştır. Auth testi için actingAs metodunu kullanabilirsin. $this->actingAs($user) gibi.
  • 24-08-2022, 12:03:53
    #3
    aenxious adlı üyeden alıntı: mesajı görüntüle
    Veritabanını sıfırlamak için RefreshDatabase trait'i yerine IlluminateFoundationTestingDatabaseMigrations trait'ini kullanabilirsin. Böylece migration'ları da her defasında çalıştırır ama RefreshDatabase'e göre daha yavaştır. Auth testi için actingAs metodunu kullanabilirsin. $this->actingAs($user) gibi.
    Birinci sorum için şu şekilde bir çözüm ürettim en kolayı bu geldi. İşimi şimdilik görüyor.
    public function setUp(): void    {        parent::setUp();        Artisan::call('migrate:fresh --seed --drop-views');    }
    ActingAs mevcut bir üyeyi doğrulamak için basit bir yol sağlıyor ama ben 2fa ile beraber doğrulamak istiyorum amacım sadece doğrulamak değil. 2. sorum için şöyle bir çözüm ürettim doğrumu emin değilim hala araştırıyorum.
    $user = User::find(2);
            $response = $this->post('/login', [
                'email' => $user->email,
                'password' => 'Aa123321.',
            ]);
            $find = UserCode::orderBy('id' , 'desc')->first();
            $response = $this->post('/2fa', [
                'code' => $find->code,
            ]);
            $this->assertAuthenticated();
  • 24-08-2022, 18:04:44
    #4
    2FA için hangi paketi kullanıyorsun bilmiyorum ama oradaki sınıfları soyutlayarak test edebilirsin. Ayrıca bu yaptığın testler Unit değil, Feature test oluyor bilgin olsun.
  • 24-08-2022, 18:12:31
    #5
    Veritabanı sıfırlamak için doğrusu budur.
    https://laravel.com/docs/9.x/databas...fter-each-test

    İki faktör için jetstream örneğini uygulayabilirsin.
    https://github.com/laravel/jetstream...rollerTest.php
  • 24-08-2022, 20:55:28
    #6
    RefreshDatabase transaction başlatır, test bittikten sonra da rollback yapar. Viewları sıfırlamaz. Test sırasında neden böyle bir şeye ihtiyaç duyduğunuzu anlamadım.