2013-05-14 2 views
3

Я тестирую приложение AJAX, где нам нужно обрабатывать временную потерю соединения с сервером или другие ошибки (например, как в Gmail или в Календаре Google). Каков хороший способ имитировать это при тестировании?Как проверить отсоединение при тестировании приложения AJAX?

Например, есть ли плагин для браузера, который позволит временно «отключить» подключение к Интернету для вкладок? Я делаю всю мою отладку в Chrome, поэтому было бы особенно полезно, если бы кто-то мог предложить предложение для этого браузера.

Другие параметры, которые я попытался, включают подключение к виртуальной машине на сервер или завершение работы сервера и его перезапуск, ни один из которых не очень легкий или простой для тестирования (последний также не сохраняет состояние.)

Уточнение: меня не интересует, как проверить обработку разъединения в тестовом коде. Я хочу создать отключение для тестирования при запуске моего приложения. В идеале, это может быть что-то легко переключаемое на одной вкладке моего браузера, что не связано с укусом всего моего интернет-соединения.

+0

Вы используете jquery? –

+0

Да, но как часть множества других фреймворков (Spine.js), где мы не можем напрямую изменять вызовы непосредственно в jQuery. –

+0

Итак, я полагаю, что использование чего-то типа https://github.com/appendto/jquery-mockjax не является вариантом. –

ответ

0

По этому вопросу, зная, какие рамки вы используете для тестирования, было бы очень хорошо. В остальном, если материал AJAX обрабатывается объектом XMLHttpRequest, вы можете сделать очень мало, так как как только запрос был запущен, вы больше не сможете его контролировать. Если вы используете фреймворк, такой как jQuery, подумайте о том, чтобы подсунуть событиям. Это предполагает синтез события синтетическим способом. Чтобы сделать это, если ваши обработчики событий являются общедоступными (они должны быть, если вы пишете поддерживаемый код), вы должны уволить их. Если нет, сделайте их общедоступными.

В противном случае, вы можете действовать на стороне сервера:

  1. Настройка «тестовый режим», где ваш сервер падает соединение в определенное время
  2. Рассмотрим маршрутизации через настраиваемый прокси (Nginx?) для эффективного выполнения шага 1 без изменения вашего сервера.
  3. Пожар обработчика отсоединения сам по себе синтетически, а не событие. Вы знаете, что ваш обработчик событий для сбоя XMLHttpRequest работает - это гарантирует, что ваш браузер не будет ошибкой. Что вам нужно проверить, если ваша функция работает.
+0

Предположим, что я накрыл свои базы в тестовом коде. Я хочу, чтобы на самом деле убедиться, что материал работает, когда соединение теперь отключено. –

+0

@AndrewMao: вы слушаете отброшенное соединение, используя событие XMLHttpRequest onreadystatechange? Если это так, вы можете подумать об этом, чтобы он работал и вместо этого вызывал функцию, связанную с этим синтетическим способом (т. Е. Подделка разъединения через JS). Желая отказаться от подключения к тестированию, вы проверите ** свой XMLHttpRequest ** своего браузера ** вместе с кодом, который не является тем, что вам нужно, и является избыточным, поскольку большинство браузеров уже имеют модульные тесты для этого объекта. –

+0

Я согласен с вашим принципом, но иногда это хорошо, чтобы видеть, что ваше приложение работает по назначению :) –

0

Когда нам приходилось это делать в прошлом, мы обычно устанавливаем настройки nic и отключаем адаптер. Некоторые из парней с ноутбуками будут работать по проводному соединению и просто отключать его.

Вы также можете использовать Netsh:

netsh interface set interface <interface name> DISABLED/ENABLED 
+0

Это можно сделать, но в моем случае (в разработке) сервер и клиент находятся на одном компьютере :) –

+0

Поскольку вы используете локальный клиент и сервер локально, вы можете добавить запись в свой файл hosts и установить ее на IP-адрес вашего устройства. Используйте это для доступа к локальному серверу, а затем, когда вы хотите имитировать отключить, просто закомментируйте запись в файле hosts и сохраните ее. Сроки будут сложными, хотя ... – Striker

0

Я не знаю ни одного готового решения, но у меня есть идея, как достичь этого.

Если ваш сервер работает в Linux, вы можете написать простой скрипт, который добавит правило к iptables, блокирующему трафик на уровне ip или tcp. Затем просто запустите сценарий, чтобы блокировать разблокирование трафика.

Я бы установил виртуальный хост на другом порту, поставил там несколько скриптов, чтобы блокировать все raffic, разблокировать трафик, дроссель и т. Д., А затем добавить эти сценарии в закладки, чтобы иметь быстрый способ их запуска. Эти сценарии просто вызывают iptables с разными параметрами.

Смежные вопросы