为什么在使用RequireJS运行Mocha测试时会显示"define not defined"?

7 浏览
0 Comments

为什么在使用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是因为我以后也想在浏览器中运行这段代码(或其中的一部分)。

0