我正在使用Codeception编写一个控制器函数的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路由“/”而不是POST路由“/register”。除了测试用例以外,一切正常——我可以正常地提交POST到注册路由,路由似乎也工作正常,问题只在Codeception测试用例中出现。
如果我更改测试用例,使得我在同一个函数调用中进行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输出中也没有任何线索可以说明发生了什么。