我正在尝试理解如何开发独立的JavaScript代码。 我希望编写具有测试和模块的JavaScript代码,并从命令行运行。 因此,我已经安装了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)
...
那么我的问题是:
- 这是编写代码的正确方式吗?
- 为什么我的测试没有运行?
- 学习这种东西的最佳方法是什么?我在谷歌上很难找到好的示例。
谢谢...
[抱歉-短暂地发布了错误代码的结果;现已修正]
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)