Почему я вижу «определить не определено» при запуске теста Mocha с RequireJS?

Я пытаюсь понять, как разработать автономный код Javascript. Я хочу написать код Javscript с тестами и модулями, запускаемыми из командной строки. Итак, я установил node.js и npm вместе с библиотеками requirejs , underscore и mocha .

Моя структура каталогов выглядит так:

> tree .
.
├── node_modules
├── src
│   └── utils.js
└── test
    └── utils.js

где src / utils.js - это небольшой модуль, который я пишу, со следующим кодом:

> cat src/utils.js 
define(['underscore'], function () {

    "use strict";

    if ('function' !== typeof Object.beget) {
        Object.beget = function (o) {
            var f = function () {
            };
            f.prototype = o;
            return new f();
        };
    }

});

и test / utils.js - это тест:

> cat test/utils.js 
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});

requirejs(['../src/utils'], function(utils) {

    suite('utils', function() {
        test('should always work', function() {
            assert.equal(1, 1);
        })
    })

});

, который я затем пытаюсь запустить из каталога верхнего уровня (так что mocha видит каталог test ):

> mocha

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Calling node's require("../src/utils") failed with error: ReferenceError: define is not defined
    at /.../node_modules/requirejs/bin/r.js:2276:27
    at Function.execCb (/.../node_modules/requirejs/bin/r.js:1872:25)
    at execManager (/.../node_modules/requirejs/bin/r.js:541:31)
    ...

Итак, мои вопросы :

  • Это правильный способ структурировать код?
  • Почему мой тест не запускается?
  • Как лучше всего изучать подобные вещи? Мне сложно найти хорошие примеры с Google.

Спасибо ...

[извините - на мгновение опубликованы результаты из-за неправильного кода; сейчас исправлено]

PS Я использую requirejs, потому что позже я хочу запустить этот код (или его часть) из браузера.

Обновление / решение

В приведенных ниже ответах нет того, что мне нужно было использовать mocha -u tdd для указанного выше стиля тестирования. Вот последний тест (который также требует assert) и его использование:

> cat test/utils.js 

var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});

requirejs(['../src/utils', 'assert'], function(utils, assert) {

    suite('utils', function() {
        test('should always work', function() {
            assert.equal(1, 1);
        })
    })

});
> mocha -u tdd

  .

  ✔ 1 tests complete (1ms)
37
задан andrew cooke 16 February 2012 в 20:55
поделиться