Как настроить тестовый жгут JavaScript github с помощью ленты и тестирования
У меня есть (JavaScript) репозиторий на GitHub, для которого я хотел бы установить тестовый комплект.
Кажется, что "лента" и "тестирование" должны делать то, что я хочу (минимальное легкое решение с красивыми значками github), если у кого-то нет альтернативных решений, но я изо всех сил пытаюсь настроить их.
Я никогда не использовал node.js, и кажется, что лента и тестирование (и все связанные примеры) сосредоточены на node.js.
Кто-нибудь может посоветовать минимальную конфигурацию для простого клиентского набора тестов библиотеки JavaScript? Я предполагаю (?) Мне нужны nodejs, npm, package.json и т. Д. Для локального запуска ленты / тестирования, но я не совсем понимаю, как включить мой (не нодальный) JavaScript в тестовый комплект.
То, что я в настоящее время имею, имеет вид:
myobj.js:
var MyObj = {};
MyObj.a = function() { return 'a'; }
MyObj.b = function() { return 'b'; }
myobj-sub.js:
MyObj.Sub = {};
MyObj.Sub.x = function() { return 'x'; }
MyObj.Sub.y = function() { return 'y'; }
Они, конечно, обычно попадают в HTML, используя
<script src="myobj.js"></script>
<script src="myobj-sub.js"></script>
Для тестового жгута, я думаю, мне понадобится что-то вроде:
var test = require('tape');
test('myobj', function(assert) {
assert.equal('a', MyObj.a(), 'test a');
assert.equal('x', MyObj.Sub.x(), 'test x');
assert.end();
});
Но я не уверен, где заполнить пробелы!
(PS: я работаю на Linux, если это имеет какое-либо значение).
Спасибо.
2 ответа
В вашем вопросе не так много пробелов. Что тебе необходимо сделать:
- Установите Node.js (это также установит
npm
инструмент командной строки). Подход здесь специфичен для дистрибутива, на дистрибутиве Linux на основе Debian вы бы сделалиsudo apt-get установить nodejs
- Настройте структуру каталогов для вашего проекта:
мой проект/ |- package.json |- myobj.js |- myobj-sub.js |- тест / |- myobj.js
Вы можете указать множество различных параметров вpackage.json
единственная важная часть, однако,devDependencies
чтобы убедиться, что тестовый жгут установлен:{ "имя": "myproj", "версия": "1.0.0", "description": "Просто какой-то тестовый проект", "devDependencies": { "tape": "~2.13.3" }, "сценарии": { "test": "проверка узла /*.js" } }
- Установить зависимости. Теперь, когда они указаны в
package.json
это просто вопрос запуска из каталога проекта:установка npm
Это загружает все зависимости и помещает их вnode_modules
подкаталог внутри вашего каталога проекта. - Запустите тесты:
npm run-script test
Вот и все, тесты запущены. Единственная проблема заключается в том, что они терпят неудачу, потому что ваши файлы сценариев не используют формат CommonJS. Вот что myobj.js
должен выглядеть так:
exports.a = function() { return 'a'; }
exports.b = function() { return 'b'; }
И вот myobj-sub.js
:
exports.x = function() { return 'x'; }
exports.y = function() { return 'y'; }
И наконец test/myobj.js
:
var test = require('tape');
var MyObj = require('../myobj');
MyObj.Sub = require('../myobj-sub');
test('myobj', function(assert) {
assert.equal('a', MyObj.a(), 'test a');
assert.equal('x', MyObj.Sub.x(), 'test x');
assert.end();
});
И если вы перезапустите тесты, теперь они пройдут успешно.
Что если вы хотите использовать свои модули CommonJS с веб-страницы? Вы можете использовать http://browserify.org/ для этого. Установите browserify:
sudo npm install -g browserify
И запустите его, чтобы получить пакет:
browserify myobj.js myobj-sub.js -o bundle.js
bundle.js
Теперь файл сценария, который может быть включен веб-страницей - и тогда веб-страница сможет сделать var MyObj = require('myobj');
так же, как тест.
Благодаря @wladimir и небольшим экспериментам, я обнаружил, что могу упорядочить вещи так, чтобы я мог структурировать свой код с помощью стандартных выражений функций, таким образом, он будет работать в браузере как обычно, а также будет работать в файле node.js.
Мне просто нужно установить module.exports для определенного объекта, а для MyObj.Sub "потребовать" MyObj (оба экрана должны быть видны только в CommonJs / node.js) следующим образом:
myobj.js:
var MyObj = {};
MyObj.a = function() { return 'a'; }
MyObj.b = function() { return 'b'; }
if (typeof module!='undefined' && module.exports) module.exports = MyObj;
myobj-sub.js:
if (typeof module!='undefined' && module.exports) var MyObj = require('./myobj.js');
MyObj.Sub = {};
MyObj.Sub.x = function() { return 'x'; }
MyObj.Sub.y = function() { return 'y'; }
if (typeof module!='undefined' && module.exports) module.exports = MyObj.Sub;
(Заметьте, что "./" кажется важным для запроса).
Затем эти файлы JavaScript могут быть вставлены в HTML с элементами