Как настроить тестовый жгут 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 ответа

Решение

В вашем вопросе не так много пробелов. Что тебе необходимо сделать:

  1. Установите Node.js (это также установит npm инструмент командной строки). Подход здесь специфичен для дистрибутива, на дистрибутиве Linux на основе Debian вы бы сделали
    sudo apt-get установить nodejs
  2. Настройте структуру каталогов для вашего проекта:
    мой проект/
    |- package.json
    |- myobj.js
    |- myobj-sub.js
    |- тест /
        |- myobj.js
    Вы можете указать множество различных параметров в package.jsonединственная важная часть, однако, devDependencies чтобы убедиться, что тестовый жгут установлен:
    {
      "имя": "myproj",
      "версия": "1.0.0",
      "description": "Просто какой-то тестовый проект",
      "devDependencies": {
        "tape": "~2.13.3"
      },
      "сценарии": {
        "test": "проверка узла /*.js"
      }
    }
  3. Установить зависимости. Теперь, когда они указаны в package.json это просто вопрос запуска из каталога проекта:
    установка npm
    Это загружает все зависимости и помещает их в node_modules подкаталог внутри вашего каталога проекта.
  4. Запустите тесты:
    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 с элементами