Как загрузить HTTP-модуль node.js из теста intern.js?

Я пытаюсь использовать среду тестирования Intern для автоматизации тестирования простого REST API, реализованного с узлами node.js и StrongLoop. StrongLoop предоставляет веб-страницу проводника, которую я использовал для проверки того, что API REST реализован, и я могу вручную протестировать API из Postman.

Первый тест API, который я пытаюсь использовать с intern.js, возвращает количество медиа-объектов в коллекции. Метод HTTP – GET, URL-адрес: http://localhost:3000/api/media/count а ответ – {"count": 2}.

Когда я запускаю свой тест intern.js, я получаю сообщение об ошибке «Ошибка: попытка потребовать выгрузить модуль http».

У меня есть подкаталог \ tests в моем приложении node.js. Мой тестовый пример – media.js:

 define([ 'intern!object', 'intern/chai!assert' ], function (registerSuite, assert, media) { registerSuite({ name: 'media', count: function() { var http = require("http"); var request = http.request; request({ url: "http://localhost:3000/api/media/count", method: "GET" }, function (error, response, body) { console.log("Status", response.statusCode); console.log("Headers", JSON.stringify(response.headers)); console.log("Response received", body); }); assert.strictEqual(body, '{"count": 2}', url + ' should return 2 items'); } }); }); 

Мой файл конфигурации intern.js:

 // Learn more about configuring this file at <https://github.com/theintern/intern/wiki/Configuring-Intern>. // These default settings work OK for most people. The options that *must* be changed below are the // packages, suites, excludeInstrumentation, and (if you want functional tests) functionalSuites. define({ // The port on which the instrumenting proxy will listen proxyPort: 9000, // A fully qualified URL to the Intern proxy proxyUrl: 'http://localhost:9000/', // Default desired capabilities for all environments. Individual capabilities can be overridden by any of the // specified browser environments in the `environments` array below as well. See // https://code.google.com/p/selenium/wiki/DesiredCapabilities for standard Selenium capabilities and // https://saucelabs.com/docs/additional-config#desired-capabilities for Sauce Labs capabilities. // Note that the `build` capability will be filled in with the current commit ID from the Travis CI environment // automatically capabilities: { 'selenium-version': '2.41.0' }, // Browsers to run integration testing against. Note that version numbers must be strings if used with Sauce // OnDemand. Options that will be permutated are browserName, version, platform, and platformVersion; any other // capabilities options specified for an environment will be copied as-is environments: [ { browserName: 'internet explorer', version: '11', platform: 'Windows 8.1' }, { browserName: 'internet explorer', version: '10', platform: 'Windows 8' }, { browserName: 'internet explorer', version: '9', platform: 'Windows 7' }, { browserName: 'firefox', version: '28', platform: [ 'OS X 10.9', 'Windows 7', 'Linux' ] }, { browserName: 'chrome', version: '34', platform: [ 'OS X 10.9', 'Windows 7', 'Linux' ] }, { browserName: 'safari', version: '6', platform: 'OS X 10.8' }, { browserName: 'safari', version: '7', platform: 'OS X 10.9' } ], // Maximum number of simultaneous integration tests that should be executed on the remote WebDriver service maxConcurrency: 3, // Name of the tunnel class to use for WebDriver tests tunnel: 'SauceLabsTunnel', // The desired AMD loader to use when running unit tests (client.html/client.js). Omit to use the default Dojo // loader useLoader: { 'host-node': 'dojo/dojo', 'host-browser': 'node_modules/dojo/dojo.js' }, // Configuration options for the module loader; any AMD configuration options supported by the specified AMD loader // can be used here loader: { // Packages that should be registered with the loader in each testing environment packages: [ { name: 'app', location: '.' }, ] }, // Non-functional test suite(s) to run in each browser suites: [ 'tests/media' /* 'myPackage/tests/foo', 'myPackage/tests/bar' */ ], // Functional test suite(s) to run in each browser once non-functional tests are completed functionalSuites: [ /* 'myPackage/tests/functional' */ ], // A regular expression matching URLs to files that should not be included in code coverage analysis excludeInstrumentation: /^(?:tests|node_modules)\// }); 

Я запускаю тест, используя команду `c: \ Repositories \ app> intern-client config = tests / intern ', и выдается следующий консольный вывод:

 c:\Repositories\app>intern-client config=tests/intern FAIL: main - media - count (0ms) Error: Attempt to require unloaded module http.request at contextRequire <D:\Users\username\AppData\Roaming\npm\node_modules\inte rn\node_modules\dojo\dojo.js:255:12> at req <D:\Users\username\AppData\Roaming\npm\node_modules\intern\node_mod ules\dojo\dojo.js:30:10> at Test.registerSuite.count [as test] <tests\media.js:23:27> at Test.run <D:\Users\username\AppData\Roaming\npm\node_modules\intern\lib \Test.js:169:19> at <D:\Users\username\AppData\Roaming\npm\node_modules\intern\lib\Suite.js: 237:13> at signalListener <D:\Users\username\AppData\Roaming\npm\node_modules\inte rn\node_modules\dojo\Deferred.js:37:21> at Promise.then.promise.then <D:\Users\username\AppData\Roaming\npm\node_m odules\intern\node_modules\dojo\Deferred.js:258:5> at runTest <D:\Users\username\AppData\Roaming\npm\node_modules\intern\lib\ Suite.js:236:46> at <D:\Users\username\AppData\Roaming\npm\node_modules\intern\lib\Suite.js: 249:7> at process._tickCallback <node.js:419:13> 1/1 tests failed 1/1 tests failed ---------------|-----------|-----------|-----------|-----------| File | % Stmts |% Branches | % Funcs | % Lines | ---------------|-----------|-----------|-----------|-----------| tests\ | 33.33 | 100 | 66.67 | 33.33 | media.js | 33.33 | 100 | 66.67 | 33.33 | ---------------|-----------|-----------|-----------|-----------| All files | 33.33 | 100 | 66.67 | 33.33 | ---------------|-----------|-----------|-----------|-----------| 

Я понимаю, что модуль http является основным модулем, автоматически установленным с node.js, однако мне интересно, не может ли intern.js, хотя и на узле, получить доступ к основным модулям без дополнительной настройки. Этот шов разумный, однако я просмотрел учебник intern.js и руководство по настройке intern.js, но не нашел способ добавить ссылку или зависимость, чтобы тестовый пример мог успешно загрузить http-модуль node.js , Я новичок в intern.js, поэтому ожидаем, что я не настроил его или тест правильно.

Я приветствую любой вклад / понимание того, что я делаю неправильно.

С наилучшими пожеланиями,

МВт

  • Как издеваться над localStorage в модульных тестах JavaScript?
  • Mocking Controller Instantiation In Angular Directive Unit Test
  • Предполагается ли, что жасмин выполняет спецификации в том порядке, в котором они объявлены или в случайном порядке?
  • Вырезать вызов селектора jQuery?
  • Как тестовый код Жасмина в блоке запуска углового модуля
  • Как предоставить mock-файлы для изменения события <input type = 'file'> для модульного тестирования
  • Угловое тестирование модуля маршрутизатора (указывает на URL-адреса)
  • Как выполнить модульную функцию «private» в nodejs
  • One Solution collect form web for “Как загрузить HTTP-модуль node.js из теста intern.js?”

    Intern запускает свои тесты в среде AMD, поэтому require загрузчика AMD, а не Node, следовательно, ваша ошибка.

    Чтобы загрузить модули узла, используйте intern/dojo/node! AMD и включать их в зависимости от вашего модуля, например:

     define([ ..., 'intern/dojo/node!http' ], function (..., http) { // Now http contains the exports of Node's http module }); 

    Это описано в Руководстве пользователя Intern в разделе « Тестирование модулей CommonJS» .

    Interesting Posts

    Автоматическое обновление div с помощью jQuery – setTimeout или другого метода?

    Как передавать значения с одной страницы на другую в javascript

    Оцените скорость двигателя браузера JS, чтобы условно отключить анимацию

    Потерянное событие нажатия кнопки из-за окна предупреждения в текстовом поле onblur event

    Есть ли способ иметь обратный вызов onload после изменения window.location.href?

    Изменение размера jquery в элементе div

    JQuery (почти) эквивалент strip_tags ()

    Доступ к данным JSON со строковым путем?

    Ограничен ли рабочий стол Firefox?

    Почему это 'onClick disable = true; this.form.submit ();» Работать на одной кнопке, но не на другой?

    Отменить сбой в HTML

    Кросс-браузерный внутренний текст для установки значений

    Игнорировать ошибки для самоподписанных сертификатов SSL, используя API-интерфейс Fetch в приложении ReactNative?

    InnerText / textContent и получение каждого текстового узла

    Могу ли я изменить контекст javascript «this»?

    JavaScript делает сайт умным, красочным и простым использованием.