我正在尝试使用实习生测试一个简单的节点模块。该模块是一个AMD模块。我遇到了几个问题
如果模块定义如下,我得到错误“moduleName”了 没有方法'map'“
define('moduleName',[]function(require){ var r= require('request');
})
如果模块定义如下,没有moduleName,我会看到这一点 错误“未定义不是函数” - 我猜它无法解析'require'
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');
}
});
});
答案 0 :(得分:0)
提供显式模块ID作为define
的第一个参数会破坏模块的可移植性,不应该这样做。目前主分支使用的加载器不支持它,因为它是一个坏主意。 geezer分支支持 ,但我再次强烈建议您永远不要使用此模式。
您提供的第二个模块定义是错误的;如果您希望加载特殊的require函数,则需要将'require'
放在依赖项数组中。如果您希望将模块ID预先加载为依赖项,则也无法使用变量将模块ID传递给require
函数。所以,它应该是这样的:
define(['require', 'foo'], function (require) {
var foo = require('foo');
});
或者,使用CommonJS兼容性包装器语法,隐式提供require
:
define(function (require) {
var r = require('foo');
});
编辑:此外,既然你已经添加了测试模块:在你的测试中define
,'/ src / api / nameApi'不是有效的AMD module identifier。