我问这个后代是因为我花了一些时间才弄清楚这一点。
我有一个使用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?
答案 0 :(得分:0)
事实证明,requirejs.config()
调用中的路径前缀应包含一个尾部斜杠:
paths: {
/*... vendor libraries are listed here ...*/
ui: 'app/ui/',
data: 'app/data/',
/* etc */
}
所以,'app/ui/'
代替'app/ui'
。
我仍然不确定这个的根本原因,因为两个版本都在浏览器中工作;也许它是grunt任务使用的不同版本的require.js,或者它可能是幽灵特有的。
留下这个问题和答案,这样可以节省一些时间。