Я пытаюсь понять, как разработать автономный код Javascript. Я хочу написать код Javscript с помощью тестов и модулей, запущенных из командной строки. Поэтому я установил node.js
и npm
вместе с библиотеками requirejs
, underscore
и mocha
.Почему я вижу «define not defined» при выполнении теста Mocha с RequireJS?
Моя структура каталогов выглядит следующим образом:
> 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, потому что я также хочу запустить этот код (или его часть) из браузера позже.
Update/Решение
Что-то, что не в ответах ниже, что мне нужно использовать 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)
Для того, чтобы он работал, мне нужно установить модуль amdefine и добавить эту строку coffeescript = >> define = require ('amdefine') (module) if (typeof define! = 'Function') << = в мой файл «class», чтобы он работал (не тестовый файл). Это своего рода раздражает, так как нужно иметь задачу удалить это после тестирования – devric