簡體   English   中英

Laravel 5 / Codeception無法正確路由

[英]Laravel 5 / Codeception not routing correctly

我正在嘗試使用代碼編寫一個控制器函數的API測試用例,我遇到的問題是,到控制器函數的路徑似乎沒有被正確評估,並且評估似乎根據我的不同而不同在我的測試用例中。

以下是我的測試用例中的代碼示例:

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);
    }

我有一個包含這些路由的routes.php文件:

Route::get('/', ['as' => 'home', 'uses' => 'HomeController@getIndex']);
Route::get('register', ['as' => 'getRegister', 'uses' =>'RegistrationController@getRegister']);
Route::post('register', ['as' => 'postRegister', 'uses' => 'RegistrationController@postRegister']);

我已經將一些調試語句插入到我的控制器類中,以便我可以看到運行的路由,如下所示:

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

目前我已經從控制器類中刪除了所有內容,因此只包含調試語句。

當我像上面那樣運行測試用例時,我得到以下調試輸出:

GET register
GET index

...所以似乎sendPOST('register',...)實際上路由到“/”的GET路由而不是“/ register”的POST路由。 在測試用例之外一切正常 - 我可以POST到寄存器路由正常,路由似乎工作正常,問題只出現在一個代碼測試案例中。

如果我更改測試用例,以便我在同一個函數調用中執行sendGET和sendPOST,例如:

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

然后我看到這個調試輸出:

GET register
GET register

...因此,通過將sendGET插入與sendPOST相同的函數,它已經改變了sendPOST行為,以便它現在路由到GET路由以進行寄存而不是GET路由索引(但仍然不會路由到正確的POST路線)。

我已經嘗試打開xdebug並且沒有任何來自xdebug輸出的線索關於發生了什么。

我想在經過大量命令行調試(使用phpstorm)之后我找到了答案:

控制器中的POST寄存器路由處理函數聲明如下:

public function postRegister(RegistrationRequest $request)
{

...要求通過依賴注入傳遞Request實例。 該請求包含一些驗證代碼,如果由於某種原因驗證代碼無法完成(例如拋出異常),則控制器函數永遠不會被調用 - 因為構建請求失敗。

在瀏覽器中,這會拋出500錯誤,但在代碼識別中,異常被捕獲不同,並且它返回重定向到/沒有數據。 這一切都發生在控制器函數之外而不是在其內部,因此控制器函數中的Log語句永遠不會運行,因為函數永遠不會被調用。 代碼中的異常處理程序是一個通用陷阱。

隱含的建議是,控制器中的依賴注入可能是個壞主意。 或者,也許,通用異常處理程序是一個壞主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM