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']);