Тестирование Ajax-запроса в Cakephp 2.0 - PullRequest
3 голосов
/ 18 ноября 2011

У меня в контроллере есть действие, которое делает что-то, только если запрос является запросом XmlHttpRequest, например:

function myAction() {
    if( $this->request->is('ajax') ) {
        doSomething();
    }
}

Как будет выглядеть TestCase для этого действия?Есть ли способ смоделировать экземпляр CakeRequest, чтобы он отображался как Ajax-запрос?

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Я не знаю, является ли это хорошим способом или нет, но добавление

$_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';

в верхней части метода тестирования сделает эту работу.В этом случае мы отправляем данные как Ajax, поэтому больше не нужно проверять.

0 голосов
/ 01 марта 2012

мы используем трюк для решения юнит-теста ajax для cake2.0

В качестве расширения Cake Supoprts .json мы создаем функцию в AppModel для обмана вызова ajax. как

public function isAjax() {
    return $this->request->isAjax() || $this->request->ext == 'json';
}

Тогда в контроллере вместо вызова $ this-> request-> isAjax () используется $ this-> isAjax ().

При тестировании действия с помощью вызова ajax мы просто добавляем суффикс .json к вызову действия, например,

    $this->testAction('/users/register');

Возможно, это не лучшее решение для проверки вызовов ajax, но это может быть обходной путь

...