Требование JS и беззаботное тестирование

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

Ответ 1

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

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

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

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

Ответ 2

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

Затем вы можете использовать модули 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.