为什么在使用RequireJS运行Mocha测试时会显示"define not defined"?
为什么在使用RequireJS运行Mocha测试时会显示"define not defined"?
我正在尝试理解如何开发独立的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) ...
所以我的问题是:
- 这样组织代码的方式正确吗?
- 为什么我的测试没有运行?
- 学习这种东西的最佳方法是什么?我在Google上很难找到好的例子。
谢谢...
[抱歉-短暂地发布了错误的代码结果;现在已修复]
PS:我使用requirejs是因为我以后也想在浏览器中运行这段代码(或其中的一部分)。