我正在尝试使用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();
}
当我转储响应时,我只是从站点/索引页面看到html。 对于除站点默认站点以外的任何路由,都会发生这种情况。如果我尝试使用站点/索引执行相同的操作,则返回:
string(36) "{"message":"hello world","code":100}"
我想念/做错了什么?
答案 0 :(得分:1)
请注意Yii route与实际网址之间的区别。
sendAjaxGetRequest()的参数是URL,而不是路由(至少如果您将其作为字符串传递,请参见下文)。
取决于您的UrlManager配置,您可能具有类似/index.php?r=site/about
的URL,其中的路由为site/about
。您可以使用Yii的网址助手来创建URL:
$I->sendAjaxGetRequest(\yii\helpers\Url::to(['site/about']));
对此我不确定,但是如果您安装了Codeception Yii2模块,那么您也应该能够通过这样的路由:
$I->sendAjaxGetRequest(['site/about']);