Yii2 功能测试发送 ajax 获取请求不工作
Yii2 Functional test send ajax get request not working
我正在尝试使用 Yii2 的基本安装来测试 ajax 请求。我只是使用 SiteController::actionAbout() 方法来尝试这个。
public function actionAbout()
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'message' => 'hello world',
'code' => 100,
];
}
并且在测试中:
public function sendAjax(\FunctionalTester $I)
{
$I->sendAjaxGetRequest('site/about');
$r = $I->grabResponse();
die(var_dump($r));
}
抓取响应方法是我自己写在\Helper\Functional.php文件中的方法:
public function grabResponse()
{
return $this->getModule('Yii2')->_getResponseContent();
}
当我转出响应时,我只看到 site/index 页面中的 html。
除了站点默认值之外的任何路由都会发生这种情况。如果我尝试使用 site/index 做同样的事情,那么它 returns:
string(36) "{"message":"hello world","code":100}"
我错过了什么/做错了什么?
注意 Yii route 和实际 URL 之间的区别。
sendAjaxGetRequest() 的参数是 URL,而不是路由(至少如果您将其作为字符串传递,请参见下文)。
根据您的 UrlManager 配置,您可能有 URL 类似 /index.php?r=site/about
,其中路由为 site/about
。你可以使用 Yii 的 Url 助手来创建 URL:
$I->sendAjaxGetRequest(\yii\helpers\Url::to(['site/about']));
我不太确定,但如果你安装了 Codeception Yii2 模块,你应该也可以通过这样的路由:
$I->sendAjaxGetRequest(['site/about']);
我正在尝试使用 Yii2 的基本安装来测试 ajax 请求。我只是使用 SiteController::actionAbout() 方法来尝试这个。
public function actionAbout()
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'message' => 'hello world',
'code' => 100,
];
}
并且在测试中:
public function sendAjax(\FunctionalTester $I)
{
$I->sendAjaxGetRequest('site/about');
$r = $I->grabResponse();
die(var_dump($r));
}
抓取响应方法是我自己写在\Helper\Functional.php文件中的方法:
public function grabResponse()
{
return $this->getModule('Yii2')->_getResponseContent();
}
当我转出响应时,我只看到 site/index 页面中的 html。 除了站点默认值之外的任何路由都会发生这种情况。如果我尝试使用 site/index 做同样的事情,那么它 returns:
string(36) "{"message":"hello world","code":100}"
我错过了什么/做错了什么?
注意 Yii route 和实际 URL 之间的区别。
sendAjaxGetRequest() 的参数是 URL,而不是路由(至少如果您将其作为字符串传递,请参见下文)。
根据您的 UrlManager 配置,您可能有 URL 类似 /index.php?r=site/about
,其中路由为 site/about
。你可以使用 Yii 的 Url 助手来创建 URL:
$I->sendAjaxGetRequest(\yii\helpers\Url::to(['site/about']));
我不太确定,但如果你安装了 Codeception Yii2 模块,你应该也可以通过这样的路由:
$I->sendAjaxGetRequest(['site/about']);