1

我问这个是为了后代,因为我花了一些时间来解决这个问题。

我有一个使用 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>文档正文中指向 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 下通过?

4

1 回答 1

0

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

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

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

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

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

于 2014-10-15T11:11:06.437 回答