RequireJS и Headless Test-Driven Development - PullRequest
10 голосов
/ 02 июня 2011

Я собираюсь использовать RequireJS для моего следующего крупного проекта JS, однако мне трудно понять, как его тестировать в среде безголового тестирования.Я новичок как в RequireJS, так и в тестируемом подходе к кодированию, поэтому все, что подходит для новичков, было бы замечательно.

Ответы [ 2 ]

5 голосов
/ 22 июня 2011

Вы можете протестировать модули RequireJS из командной строки , используя r.js для запуска ваших скриптов в узле .

Затем вы можете использовать модули Node, такие как assert , для создания набора тестов для себя.

Вот слишком простой пример:

scripts/simple.js:

define({ name: 'Really simple module' });

tests/test_simple.js:

require({ baseUrl: 'scripts' }, ['assert', 'simple'], function(assert, simple) {

    var test = function(callback) {
        var msg;
        try {
            callback();
        } catch (e) {
            msg = 'Failed: expected "' + e.expected + 
                  '" but got "' + e.actual + '" instead.';
        }
        if (!msg) {
            msg = 'Passed';
        }
        console.log(msg);
    };

    // This will pass
    test(function() {
        assert.equal(simple.name, 'Really simple module');
    });

    // This will fail
    test(function() {
        assert.equal(simple.name, 'Foo');
    });

});

Затем вы можете запустить тест из каталога верхнего уровня вашего проекта:

node path/to/r.js test/test_simple.js

И вы, вероятно, могли бы добиться большего успеха, чем это. Модуль assert - это просто необходимые инструменты для создания набора тестов. Если вы не хотите накатывать свои собственные, вы можете попробовать использовать пакет типа CommonJS Test Runner , но сначала обязательно прочитайте документацию r.js .

3 голосов
/ 02 июня 2011

ОК, вот мои мысли. Вы должны писать тесты только для своего собственного кода, а не для стороннего кода, поэтому нет необходимости проверять, что RequireJS как библиотека работает правильно. (У них есть свои собственные тесты, которым вы должны доверять.)

Так что вы должны иметь в виду, что RequireJS работает в ваших тестах. Точно так же, как вы предполагаете, parseInt работает, setTimeout работает и Math.min работает: разработчики этих программ имеют свои собственные тесты, и вам не нужно писать больше.

Если он не работает (что маловероятно), или если вы используете его неправильно (чуть более вероятно), то ваш тест должен провалиться катастрофически: вы в конечном итоге вызовете методы, например, для объектов, которые не существуют. 1008 *

Имея это в виду, вам следует провести модульное тестирование ваших отдельных модулей RequireJS. Для этого либо каждое тестовое устройство должно быть заключено в модуль, который require s является его модулем тестируемой системы, либо тесты должны быть асинхронными, и как часть их они должны require тестируемая система- модуль. Опять же, просто предположим, что вы вернули правильный модуль: если вы этого не сделали, т.е. если вы неправильно используете RequireJS, тесты будут катастрофически провалены.

...