2015-12-18 24 views
10

phpunit çalıştırıldığında, Kimlik Doğrulama ve CSRF hatalarının ortaya çıkması yaygındır. Laravel Testlerinde Seçilen Ara Katman Nasıl Devre Dışı Bırakılır

Yani TestCase içinde kullandığımız:

use WithoutMiddleware;

bu sorun formları başarısız olduğunda, genellikle geri Flaş Mesaj ve Eski Girişi ile geliyor olması. Tüm ara katman yazılımlarını devre dışı bıraktık, dolayısıyla Input::old('username'); veya flash mesaja erişimimiz yok.

Ayrıca bu bizim testleri formu sonrası döner başarısız oldu:

Caused by 
exception 'RuntimeException' with message 'Session store not set on request. 

Oturum Middleware etkinleştirmek ve diğer her şeyi devre dışı bırakmak için bir yolu var mı.

+0

Ayrıca bu https://github.com/laravel/internals/issues/506#issuecomment-291552399 – ira

cevap

16

Bunu yapmanın en iyi yolu, WithoutMiddleware özelliğiyle değil, devre dışı bırakmak istediğiniz aracı yazılımını değiştirerek değil. Örneğin, testlerinizde VerifyCsrfToken ara katman yazılımını devre dışı bırakmak isterseniz, aşağıdakileri yapabilirsiniz.

app/Http/Middleware/VerifyCsrfToken.php İçerisinde, test için APP_ENV numarasını denetleyen bir handle yöntemi ekleyin.

public function handle($request, Closure $next) 
{ 
    if (env('APP_ENV') === 'testing') { 
     return $next($request); 
    } 

    return parent::handle($request, $next); 
} 

Bu tamamen işlevleri devre dışı bırakarak, Illuminate\Foundation\Http\Middleware\VerifyCsrfToken içinde handle yöntemi geçersiz kılar.

+2

güzel bir çözüm, okumak ve anlamak için bir göz atmak isteyebilirsiniz. btw, 'env ('APP_ENV')' biraz daha güzel olan 'app() -> env' ile değiştirilebiliyor :) –

+0

Teşekkür ederim. Birisi VerifyCSRF yöntemini geçersiz kılmaya çalışıyorsa ve bir 'Argument 2'nin App \ Http \ Middleware \ Closure' türünde olması gerekiyorsa, bu [yanıtı] işaretleyin (http://stackoverflow.com/questions/33121192/laravel- 5-1-önleme-csrf-uyumsuzluk-atma-istisna) – surfer190

+1

Ayrıca bu yardımcı olur: https://github.com/laravel/framework/pull/18673 – meysam

İlgili konular