如何使用jasmine-node配置RequireJS(require.config())?

时间:2012-06-28 23:03:06

标签: javascript node.js coffeescript requirejs jasmine

我有一个init文件,它提供了一个通过require.config()引导RequireJS的函数。配置最终看起来(大多数情况下)是这样的:

...

config =
    baseUrl: sysDir + 'lib/'
    paths:
        app: appDir + 'lib/'
        dep: sysDir + 'vendor/'
    deps: [
        'dep/underscore/underscore.min'
        'dep/jquery/jquery.min'
    ]

require.config config

此文件在浏览器中使用,我也想在节点中使用它。我试图在帮助器中做同样的事情,但我没有太多运气。由于在新的VM上下文中运行规范的方式,我不确定该怎么做,并且没有明显的方法来传递您的RequireJS配置的jasmine-node。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我通过将require config放入specs目录根目录下的spec_helper.js来实现这一目标:

define = require('requirejs');

(function () {
    var baseUrl = __dirname + '/../smoke'
    console.log('Configuring requirejs with baseurl: ' + baseUrl)

    define.config({
        'nodeRequire': global.require,
        'baseUrl': baseUrl
    });
})();

不确定这是否真的可以解决您的问题。

答案 1 :(得分:0)

jasmine-node为requirejs提供了一个示例项目:https://github.com/mhevery/jasmine-node#requirejs

如果您调用> jasmine-node --runWithRequireJs --requireJsSetup tests/requirejs-setup.js tests之类的测试,则可以在requirejs-setup文件中添加配置设置。

然而我的baseUrl设置有问题。在requirejs-wrapper-template.js中,baseUrl被操作并相对于当前执行的测试文件进行设置,您可以在此处看到:

if(alteredConfig.baseUrl){
    var base = baseUrl.replace(/\\/g, '/'),
        splitUrl = alteredConfig.baseUrl.replace(/\\/g, '/').split('/'),
        index = 0;

    for(; index < splitUrl.length; index++){
        if(splitUrl[index] === '..') {
            base = path.dirname(base);
        } else {
            base += '/' + splitUrl[index];
        }
    }

    alteredConfig.baseUrl = base;
}

这会导致我的requirejs配置中定义路径出现问题。所以我只是注释掉了这个代码块。现在它对我很有用。