Yii2 Функциональный тест отправить ajax запрос на получение не работает - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь протестировать запрос 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}"

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

1 Ответ

0 голосов
/ 07 февраля 2019

Обратите внимание на разницу между маршрутом 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']);
...