3

我有一个 init 文件,它提供了一个通过require.config(). 配置最终看起来(大部分)是这样的:

...

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

require.config config

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

有任何想法吗?

4

2 回答 2

1

我通过将 require 配置放入我的 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
    });
})();

不确定这是否真的能解决你的问题。

于 2012-06-29T17:44:07.657 回答
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 配置中定义的路径出现问题。所以我只是注释掉了这个代码块。现在它对我来说效果很好。

于 2014-03-21T09:46:53.670 回答