使用Intern Js测试节点模块 - 无法解析'require'

时间:2013-10-10 05:24:22

标签: javascript unit-testing javascript-framework intern

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

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

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

  2. 如果模块定义如下,没有moduleName,我会看到这一点     错误“未定义不是函数” - 我猜它无法解析'require'

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

  3. 以下是我的测试外观

    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');
        }
    });
    

    });

1 个答案:

答案 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