Сборочные инструменты
Проверка с помощью — менеджер пакетов, входящий в состав Node.js');" onmouseout="hide()">npm
В данной статье рассказывается как получить three.js в среде node.js, так чтобы можно было выполнять автоматические проверки. Тестирование можно запускать из командной строки или с помощью автоматизированных инструментов непрерывной интеграциинепрерывная интеграция — это практика разработки
программного обеспечения, которая заключается в
слиянии рабочих копий в общую основную ветвь
разработки несколько раз в день и выполнении частых
автоматизированных сборок проекта для скорейшего
выявления и решения интеграционных проблем.');" onmouseout="hide()">(CI), вроде Travis.
Более подробно про непрерывную интеграцию можно посмотреть в Википедии или на Хабрахабре.
Сокращенный вариант
Если вам привычна работа с node и npm,$ npm install three --save-devи к своей проверке добавьте
var THREE = require('three');
Создание проекта для тестирования с нуля
Если эти инструменты вам незнакомы, вот краткое руководство (для Linux процесс установки будет немного отличаться от работы в Windows, но команды npm идентичны).Basic setup
- Устанавливаем npm и node.js. Кратчайший путь обычно выглядит приблизительно так
$ sudo apt-get install -y npm nodejs-legacy # fix any problems with SSL in the default registry URL $ npm config set registry http://registry.npmjs.org/
- Делаем каталог нового проекта
$ mkdir test-example; cd test-example
- Запрашиваем npm для создания файла нового проекта to create a new project file for you:
$ npm init
and accept all defaults by hitting Enter on all the prompts. This will create package.json. - Try and start the test feature with
$ npm test
This will fail, which is expected. If you look in the package.json, the definition of the test script is"test": "echo \"Error: no test specified\" && exit 1"
Добавляем
многофункциональная среда для тестирования JavaScript,
работающая на Node.js и в браузере, что делает
асинхронное тестирование простым и интересным.
'
+'Тестирование Mocha запускается поочередно, позволяя
гибко и точно сообщать, а также сопоставлять
неперехваченные исключения с правильными
тестовыми примерами.');" onmouseout="hide()">mocha
Будем использовать mocha.
- Устанавливаем mocha с помощью
$ npm install mocha --save-dev
Обратите внимание, что node_modules/ создан и все зависимости окажуться там. Также отметьте, что package.json был обновлен: добавлено и обновлено свойство devDependencies при помощи --save-dev. Notice that node_modules/ is created and your dependencies appear in there. Also notice that your package.json has been updated: the property devDependencies is added and updated by the use of --save-dev. - Edit package.json to use mocha for testing. When test is invoked, we just want to run mocha and specify a verbose reporter. By default this will run anything in test/ (not having directory test/ can run into npm ERR!, create it by mkdir test)
"test": "mocha --reporter list"
- Перезапускаем тест с помощью
$ npm test.
Теперь он должен быть успешным, This should now succeed, reporting 0 passing (1ms) or similar.
Добавление three.js
- Let's pull in our three.js dependency with
$ npm install three --save-dev
- Если нужна другая версия three.js, используйте
$ npm show three versions
чтобы посмотреть, какая доступна. to see what's available. To tell npm the right one, use$ npm install [email protected] --save
(0.84.0 in this example). --save makes this a dependency of this project, rather than dev dependency. Для более подробных сведений смотрите документацию здесь.
- Если нужна другая версия three.js, используйте
- Mocha will look for tests in test/, so let's
$ mkdir test.
- Finally we actually need a JS test to run. Let's add a simple test that will verify that the three.js object is available and working. Create test/verify-three.js containing:
var THREE = require('three'); var assert = require("assert");
describe('The THREE object', function() { it('should have a defined BasicShadowMap constant', function() { assert.notEqual('undefined', THREE.BasicShadowMap); }),
it('should be able to construct a Vector3 with default of x=0', function() { var vec3 = new THREE.Vector3(); assert.equal(0, vec3.x); }) }) - Finally let's test again with $ npm test. This should run the tests above and succeed, showing something like:
The THREE object should have a defined BasicShadowMap constant: 0ms The THREE object should be able to construct a Vector3 with default of x=0: 0ms 2 passing (8ms)
Добавляем свой собственный код
Нужно сделать три вещи:- Написать тест для ожидаемого поведения своего кода и разместить его в test/. Вот пример из реального проекта.
- Экспортируйте свой действующий код таким образом, чтобы nodejs мог его видеть, для использования в сочетании с require. Смотрите пример здесь. Export your functional code in such a way that nodejs can see it, for use in conjunction with require. See it [link:https://github.com/air/encounter/blob/master/js/Physics.js here].
- Require your code into the test file, in the same way we did a require('three') in the example above.
//============================================================================= // make available in nodejs //============================================================================= if (typeof exports !== 'undefined') { module.exports = Physics; }
Работа с зависимостями
Если вы уже пользовались чем-то умным, вродеОн оптимизирован для работы в браузере, но может
использоваться и в других средах JavaScript, вроде
Rhino и Node. Использование модульного загрузчика
скрипта, подобного RequireJS, повышает скорость
и качество кода.');" onmouseout="hide()" target="_blank">require.js или browserify, пропустите эту часть.
Обычно, проект three.js запускается в браузере. Следовательно, загрузка модуля браузером выполняет множество скриптовых тегов. Отдельные файлы проекта не должны беспокоиться о зависимостях. Module loading is hence done by the browser executing a bunch of script tags. Your individual files don't have to worry about dependencies. Однако, в контексте nodejs нет файла index.html, увязывающего все вместе, так что In a nodejs context however, there is no index.html binding everything together, so you have to be explicit.
Если экспортируется модуль, зависящий от других файлов, нужно указать node о их загрузке.
Вот один из подходов:
- В начале кода модуля проверьте, находитесь ли вы в среде node.js.
- Если это так, явно объявите зависимости.
- Если нет, то вероятно вы в браузере, так что больше ничего не нужно делать.
//============================================================================= // setup for server-side testing (установка проверки на стороне сервера) //============================================================================= if (typeof require === 'function') // test for nodejs environment (проверка среды nodejs) { var THREE = require('three'); var MY3 = require('./MY3.js'); }