Yii2功能测试发送ajax获取请求不起作用

时间:2019-02-07 11:12:35

标签: yii2 codeception

我正在尝试使用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}"

我想念/做错了什么?

1 个答案:

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