2015-04-09 33 views
13

Kodlayıcı kullanarak bir denetleyici işlevi için bir API sınama durumu yazmaya çalışıyorum ve denetleyici işlevine giden yolun doğru olarak değerlendirilmediği bir sorunla karşılaşıyorum ve Değerlendirme, benim durumumda olana bağlı olarak farklı görünüyor. Öyle benim denetleyicisi sınıfları bazı hata ayıklama ifadeleri eklediktenLaravel 5/Codeception doğru yönlendirilmiyor

Route::get('/', ['as' => 'home', 'uses' => '[email protected]']); 
Route::get('register', ['as' => 'getRegister', 'uses' =>'[email protected]']); 
Route::post('register', ['as' => 'postRegister', 'uses' => '[email protected]']); 

: Bir routes.php dosyasını içeren bu rotalar var

use \ApiTester; 

class CustomerRegisterCest 
{ 
    // tests 
    public function testGetRegister(ApiTester $I) 
    { 
     $I->sendGET('register'); 
     $I->seeResponseCodeIs(200); 
    } 

    public function testPostRegister(ApiTester $I) 
    { 
     $I->sendPOST('register', [ 
      // set the data in here 
     ]); 
     $I->seeResponseCodeIs(200); 
    } 

: Burada

bir kod benim test davadan örnek şu anda

Log::debug('GET register'); // or GET index or POST register, etc 

Ben Stripp var: ne yolları böyle, koşmak olsun görebilirsiniz SADECE hata ayıklama ifadelerinin dahil edilmesini sağlamak için denetleyici sınıflarımdaki her şeyi yazdım. o sendPOST ('kayıt' ...) o GET rotaya aslında yolları görünecek şekilde ...

GET register 
GET index 

: Ben yukarıdaki gibi test case çalıştırdığınızda

, aşağıdaki hata ayıklama çıktısını almak "/" için POST yolunun yerine "/" için. Test durumunun dışında her şey normal çalışıyor - Kayıt rotalarına POST yapabilirim, yönlendirme işe yarıyor gibi görünüyor, problem sadece bir kodek-test testinin içinde gözüküyor. Aynı işlev çağrısı içinde sendGET ve sendPOST yapıyorum ki ben böyle örneğin, test durumu değiştirirseniz

:

GET register 
GET register 
: Bu debug çıktısına bakın sonra
// tests 
    public function testPostRegister(ApiTester $I) 
    { 
     $I->sendGET('register'); 
     $I->seeResponseCodeIs(200); 
     $I->sendPOST('register', [ 
      // set the data in here 
     ]); 
     $I->seeResponseCodeIs(200); 
    } 

... böylece sendGET'i sendPOST ile aynı işleve ekleyerek, sendPOST davranışını değiştirdi, böylece artık dizin için GET rotası yerine kayıt için GET rotasına yönlendirir (ancak yine de rota olmaz doğru POST yoluna).

xdebug'i açmayı denedim ve xdebug çıktısından ne olup bittiğine dair hiçbir ipucunuz yok.

denetleyicisi POST kayıt rota işleme fonksiyonu böyle ilan edildi:

+0

Sorununuz tam olarak nedir? –

cevap

6

Ben komut satırı hata ayıklama bir sürü (kullanarak PhpStorm) sonra cevabını buldum

public function postRegister(RegistrationRequest $request) 
{ 

... Bağımlılık enjeksiyonu yoluyla iletilecek bir İsteğin örneğini gerektiren. Bu istek, bazı doğrulama kodu içeriyordu ve bir nedenden dolayı doğrulama kodu tamamlanamadıysa (ör., Bir istisna atar), denetleyici işlevi hiçbir zaman çağrılmaz - çünkü istek oluşturma başarısız olur.

Bu, tarayıcıda, 500 hatası atar, ancak codeception alanında istisna farklı bir şekilde yakalanır ve hiçbir veri olmadan bir yönlendirme döndürür. Bu, denetleyici işlevindeki Günlük deyimi, işlev hiçbir zaman çağrılmadığı için hiçbir zaman çalışmadığı için denetleyici işlevinin dışında olur. Codeception'daki istisna işleyici, genel bir tuzaktır.

Kesin öneri, denetleyicilerin bağımlı bağımlılıklarının belki de kötü bir fikir olmasıdır. Ya da, bu genel istisna işleyicileri kötü bir fikirdir.