【发布时间】:2012-03-07 10:02:07
【问题描述】:
我正在尝试了解如何开发独立的 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 来进行上面的测试样式。这是最终测试(也需要断言)及其用途:
> 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' )
标签: javascript node.js npm requirejs mocha.js