为什么grunt-contrib-jasmine会悬挂?

时间:2014-10-15 11:07:49

标签: javascript requirejs gruntjs jasmine grunt-contrib-jasmine

我问这个后代是因为我花了一些时间才弄清楚这一点。

我有一个使用require.js的应用程序和基于jasmine的测试,使用grunt自动执行。

我已将模块分组为逻辑组件,每个组件都位于app下的目录中。我的requirejs.config()调用为这些组件设置路径前缀,如下所示:

paths: {
    /*... vendor libraries are listed here ...*/
    ui: 'app/ui',
    data: 'app/data',
    /* etc */
}

然后我可以像这样指定对这些模块的依赖:

define([ 'ui/some/module', 'data/another/module' ], function(ui_module, data_module) {
    /* code for module being defined goes here */
});

我的应用程序正常运行,我的测试通过基于Web的运行程序,该运行程序遵循类似于我在应用程序中使用的结构,这是文档正文中指向的单个<script>元素to require.js,data-main设置为test/index,其中包含非常相似的requirejs.config()调用,仅包含测试本身的其他路径,以及对window.onload()的调用,它运行测试。

但是,当我使用grunt-contrib-jasmine时,测试会挂起并且不会运行任何测试。我得到的信息是:

>> Error: timeout: Load timeout for modules: [list of modules, all my own application modules]
>> http://requirejs.org/docs/errors.html#timeout at
>> http:/127.0.0.1:8000/_SpecRunner.html:21 
>> http:/127.0.0.1:8000/.grunt/grunt-contrib-jasmine/require.js:12 v
>> http:/127.0.0.1:8000/.grunt/grunt-contrib-jasmine/require.js:14 C
>> http:/127.0.0.1:8000/.grunt/grunt-contrib-jasmine/require.js:14 

如何让我的测试通过grunt?

1 个答案:

答案 0 :(得分:0)

事实证明,requirejs.config()调用中的路径前缀应包含一个尾部斜杠:

paths: {
    /*... vendor libraries are listed here ...*/
    ui: 'app/ui/',
    data: 'app/data/',
    /* etc */
}

所以,'app/ui/'代替'app/ui'

我仍然不确定这个的根本原因,因为两个版本都在浏览器中工作;也许它是grunt任务使用的不同版本的require.js,或者它可能是幽灵特有的。

留下这个问题和答案,这样可以节省一些时间。