2016-03-25 22 views
1

kullanarak vagrant kutusunda herhangi bir test yapılamıyor Bir şirkette çalışıyorum. PHPUnit sınamalarını nasıl sunacağımı biliyorum. Ama neden şef tarafından yapılandırılmış vagrant kutusunda test yapamadığımı bilmiyorum. i PHPUnit komutunu çalıştırıyorum zaman, ben hata altına alıyorum:PHPUnit

There was 1 failure: 

1) ExampleTest::testBasicExample 
A request to [en/contact] failed. Received status code [404]. 

/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:178 
/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:72 
/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:53 
/..../tests/ExampleTest.php:16 

Caused by 
ErrorException: Cannot modify header information - headers already sent by (output started at /..../vendor/phpunit/phpunit/src/Util/Printer.php:133) in /..../app/Http/Middleware/SetCookieData.php:17 

Herhangi bir yardım çok kayda değer olacaktır.

cevap

2

Denemeniz düzgün çalışıyor. Örnek testinizde, visit('en/contact') numarasına bir çağrı yaptınız. Bu URL'yi ziyaret etmeye çalıştı, ancak 200 yerine 404 aldı. Gördüğünüz ekran, testinizin bu URL'yi ziyaret etmeye çalışmanızın sonucudur.

Sorun, kodunuzun app/Http/Middleware/SetCookieData.php kodundaki üstbilgileri (header() işlevini kullanarak) değiştirmeye çalışmasıdır, ancak PHPUnit zaten çıktıyı STDOUT olarak yazmıştır. Yani, PHP, çıktı yazdıktan sonra üstbilgileri değiştirmeye çalıştığınız bir hatayı atıyor. --stderr seçeneğiyle

  1. çalıştırın PHPUnit (veya phpunit.xml için stderr="true" ekleyin):

    [1] [2] [3] zaten bu sorunla ilgili, ama burada özetlemek için birkaç cevaplar vardır. Bu şekilde, PHPUnit STDERR'ye yazacaktır, bu yüzden PHP zaten STDOUT'a yazıldığından şikayet etmeyecektir. Bu muhtemelen en kolay seçenek.

  2. Testiniz için @runInSeparateProcess ek açıklamalarını kullanmayı deneyin. Yine de, çerçevenin karmaşıklığı nedeniyle sorunları yaşayabilirsiniz. Ek olarak, muhtemelen bu açıklamaya ihtiyaç duyan birçok testiniz olacak ve bu kaynak yoğun olacaktır.

    /** 
    * @runInSeparateProcess 
    */ 
    public function testBasicExample() 
    { 
        // visit('en/contact'); 
    } 
    
  3. Run --process-isolation bayrağıyla PHPUnit (veya phpunit.xml için processIsolation="true" ekleyin). @runInSeparateProcess ek açıklamasıyla aynı sorunlar.

  4. Başlıkların gerçekten gönderilmemesi için yerleşik header() işlevini kullanmaya çalışın. Yine de, bu sayfalarınızın nasıl tepki verdiğini değiştirebilir, bu yüzden muhtemelen daha fazla test kodu yazmanız gerekecek.

Referanslar:

+0

Ama sayfa orada. URL’ye göz atabilirim. Neden 404 hatası veriyor ki bu benim sorum. –

+0

@WilliamFrancisGomes Cevabımı güncelledim. – patricus

+0

Teşekkürler. Kontrol edip haber vereceğim. –