Функциональный тест Yii2 отправить запрос на получение ajax не работает

Я пытаюсь протестировать запрос ajax с базовой установкой Yii2. Я просто использую метод 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}"

Что я упускаю/делаю неправильно?


person GaryC    schedule 07.02.2019    source источник


Ответы (1)


Обратите внимание на разницу между маршрутом Yii и фактическим URL-адресом.

Аргументом sendAjaxGetRequest() является URL-адрес, а не маршрут (по крайней мере, если вы передать его как строку, см. ниже).

В зависимости от вашей конфигурации UrlManager у вас могут быть такие URL-адреса, как /index.php?r=site/about, где маршрут site/about. Вы можете использовать хелпер Url Yii для создания URL:

$I->sendAjaxGetRequest(\yii\helpers\Url::to(['site/about']));

Я не уверен в этом, но если у вас установлен модуль Codeception Yii2, вы также сможете пройти маршрут следующим образом:

$I->sendAjaxGetRequest(['site/about']);
person cebe    schedule 07.02.2019