Настройка стажера для установки/демонтажа макета моего сервера

Я пишу набор тестов для виджета JavaScript, используя Intern.

Я написал несколько тестов на чистом JavaScript и несколько встроенных тестов DOM, но я немного застрял в том, как писать функциональные тесты для функциональности Ajax, которые должны общаться с мой простой фиктивный сервер Node.js (который отлично подходит для ручных тестов).

В частности, что я хотел бы сделать:

  1. Запустите фиктивный сервер Node.js на этапе настройки набора тестов.
  2. Снести фиктивный сервер после завершения теста
  3. (Бонусные баллы) Возможность опрашивать фиктивный сервер из моих тестов Intern, например, проверяя содержимое POST запрос к макету

Я застрял на всех трех - я не могу найти никакой документации или пример кода от Intern о том, как настроить или отключить отдельный процесс (например, фиктивный сервер Node.js ) в наборе тестов.

Я использую Intern with Sauce Labs (размещенный на Selenium) - я не уверен если мою проблему нужно решить только на стороне стажера или на стороне Sauce Labs. Надеюсь, у кого-то это работает и может посоветовать.


person Alex Dean    schedule 26.09.2013    source источник
comment
Не могли бы вы рассказать немного о том, где/как вы застряли?   -  person Shog9    schedule 02.10.2013
comment
Привет, Shog9. Я не могу найти документацию от Intern о том, как настроить или отключить отдельный процесс (например, фиктивный сервер node.js) в наборе тестов. Кроме того, я не знаю, что сказать... Команда, стоящая за Intern, предлагает пользователям публиковать вопросы в службу поддержки на Stack Overflow, и все, что я получаю, это отрицательные голоса! :-)   -  person Alex Dean    schedule 03.10.2013
comment
Так-то лучше. Извините, я не могу вам помочь, но, надеюсь, кто-то, знакомый с Intern, сможет решить эту проблему.   -  person Shog9    schedule 03.10.2013
comment
Спасибо Shog9, я добавил немного больше фона.   -  person Alex Dean    schedule 03.10.2013
comment
Если вы ничего не найдете здесь, вы также можете попробовать обеспечение качества и тестирование программного обеспечения.   -  person Shog9    schedule 03.10.2013
comment
Спасибо, я даже не знал, что такой существует!   -  person Alex Dean    schedule 03.10.2013
comment
Хм, я не знаком с тем, как работает Sauce. Будет ли ваш фиктивный сервер узла работать на их сервере? Если бы все работало локально, я бы попробовал просто выполнить child_process.spawn('node', ['myMockServer.js']); на этапе установки (с некоторой магией, чтобы избежать нескольких экземпляров). Но я предполагаю, что использование Sauce несколько усложняет ситуацию. Об имитировании самих Ajax-запросов не может быть и речи, да?   -  person Frode    schedule 04.10.2013
comment
Спасибо Фроде. Я бы предпочел издеваться над конечной точкой AJAX, чем над запросами AJAX - если я издеваюсь над запросами, то я не очень много тестирую. Когда вы говорите об этапе настройки тестов, есть ли какая-либо документация для стажеров, на которую вы можете мне указать? Я не могу найти никаких конкретных инструкций по установке/разборке в тестах Intern.   -  person Alex Dean    schedule 05.10.2013
comment
Разница между имитацией AJAX-запроса и созданием сервера-заглушки заключается в большом количестве работы с минимальным выигрышем (с сервером-заглушкой вы только добавляете сеть). OTOH, если вы тестируете от начала до конца, вы можете заглушить свой репозиторий (чтобы не связываться с реальными данными пользователя).   -  person zhon    schedule 08.10.2013
comment
@AlexDean У меня действительно нет хороших ссылок. Я только что видел примеры на github.com/theintern/intern/wiki/Writing -Тесты, которые могут иметь методы setup (вызываются перед набором), teardown (вызываются после набора) и beforeEach (вызываются перед каждым тестом набора) в объекте registerSuite.   -  person Frode    schedule 08.10.2013
comment
Большое спасибо @Frode - я пропустил этапы setup и teardown. Я собираюсь попытаться что-нибудь зашуршать, опубликую ответ, когда заработаю.   -  person Alex Dean    schedule 09.10.2013
comment
@zhon - я думаю, что у обоих подходов есть сильные и слабые стороны. Для меня добавление сети только для виджета JavaScript немного похоже на добавление файловой системы для настольного приложения. Если я запускаю 49 комбинаций браузер-ОС в Sauce Labs, это упущенная возможность издеваться над вводом-выводом, а не тестировать его в реальности.   -  person Alex Dean    schedule 09.10.2013
comment
Вы правы, написание фиктивного сервера может помочь вам найти проблемы в вашем виджете, о которых вы, возможно, не думали, такие как тайм-ауты, ошибки 404 и плохо сформированные ответы. OTOH, проще настроить заглушки AJAX, чтобы помочь протестировать эти сценарии.   -  person zhon    schedule 09.10.2013
comment
@AlexDean Обязательно опубликуйте свое решение в качестве ответа, если вы его найдете. Было бы интересно посмотреть.   -  person Frode    schedule 12.10.2013


Ответы (1)


Если вы хотите, чтобы сервер запускался и останавливался для каждого пакета, методы setup и teardown были бы тем местом, где можно это сделать, например:

var server;

registerSuite({
    name: 'myTests',

    setup: function () {
        server = startServer();
    },

    teardown: function () {
        server.close();
    },

    ...
});

startServer будет любой функцией, которую вы используете для запуска своего тестового сервера. Предположительно, он вернет объект, который будет использоваться для взаимодействия с сервером. Любые тесты в наборе будут иметь доступ к объекту server.

person jason0x43    schedule 21.08.2014