【问题标题】:Why is grunt-contrib-jasmine hanging?为什么 grunt-contrib-jasmine 挂了?
【发布时间】:2014-10-15 11:07:49
【问题描述】:

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

我有一个应用程序,它使用 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 的运行程序,该运行程序遵循与我在应用程序中使用的结构类似的结构,它是文档正文中指向 require.js 的单个 <script> 元素,将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 下通过?

【问题讨论】:

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


    【解决方案1】:

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

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

    所以,'app/ui/' 而不是 'app/ui'

    我仍然不确定造成这种情况的根本原因,因为这两个版本都可以在浏览器中运行;也许它是 grunt 任务使用的不同版本的 require.js,或者它是 phantom 特有的东西。

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

    【讨论】:

    • 如果有人想对此进行扩展,包括根本原因,我很乐意将该答案标记为正确,否则我会在允许时将其标记为正确。
    猜你喜欢
    • 2013-02-06
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2014-04-05
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多