0

我正在尝试使用实习生测试一个简单的节点模块。该模块是一个 AMD 模块。我遇到了几个问题

  1. 如果模块定义如下,我得到错误“moduleName”没有方法“map””

    define('moduleName',[]function(require){ var r= require('request'); })

  2. 如果模块在没有模块名称的情况下定义如下,我会看到此错误“未定义不是函数”-我猜它无法解析“要求”

    define([]function(require){ var r= require('request'); })

这是我的测试的样子

define([
'intern!object',
'intern/chai!assert',
'/src/api/nameApi'
], function (registerSuite, assert,nameApi) {
    registerSuite({
    name: 'GetName Test',
    getName: function () {
        var nameFromApi = nameApi.getName();
        assert( nameFromApi!= null,'name is not null');
    }
});

});

4

1 回答 1

0

提供显式模块 ID 作为第一个参数会define破坏模块的可移植性,不应该这样做。master 分支使用的加载器当前不支持它,因为这是一个坏主意。它geezer 分支支持,但我再次强烈建议您不要使用这种模式。

您提供的第二个模块定义是错误的;'require'如果您希望加载特殊的 require 函数,则需要放入您的依赖项数组。require如果您希望将模块 ID 作为依赖项预加载,则也不能使用变量将模块 ID 传递给函数。所以,它应该是这样的:

define(['require', 'foo'], function (require) {
    var foo = require('foo');
});

或者,使用 CommonJS 兼容性包装语法,其中require隐式提供:

define(function (require) {
    var r = require('foo');
});

编辑:另外,既然您已经添加了测试模块:在您的测试中define,'/src/api/nameApi' 不是有效的AMD 模块标识符

于 2013-10-10T06:03:54.637 回答