我有一个项目,我刚刚介绍了RequireJS。在RequireJS之前,我一直在用Jasmine测试我的项目。我现在正在尝试更新Jasmine的SpecRunner,以便它可以处理RequireJS。
我找到了this article on unit testing with RequireJS and Jasmine我曾经让我开始。关于我如何加载模块,我遇到了麻烦。每个模块定义了它依赖的其他模块,但每个模块的加载路径都与requireJS加载的位置有关。
我在两个不同的位置加载requireJS:background.html和SpecRunner.html。背景是主要应用程序,SpecRunner是用于测试。问题是我的模块在从SpecRunner调用时无法加载,因为它们的相对路径发生了变化。
示例:
使用此文件夹层次结构和文件,我有两个方案。代码正常运行的代码和存在问题的代码:
良好的情景
糟糕的情景
我不确定我应该如何处理?似乎非常明确地使用路径名是我唯一的出路,但这违背了所有的requireJS示例。
答案 0 :(得分:4)
require中的路径相对于数据主要位置或相对于调用require()
的函数的位置。在您的好方案中,这是js/background/
,在您的错误情况下,这是tests/
。在您链接的博客中,他们使用require.paths使其正常工作:
<!--
Since we are in the "test" directory, not in the standard
"js" directory, we need to define the path prefix' for the
RequireJS modules so that the modules can be found from the
tests running in the Spec directory.
-->
<script type="text/javascript">
var require = {
paths: {
"domReady": "../js/lib/require/domReady",
"model": "../js/model"
}
};
</script>
在您的情况下,您必须设置路径,如
'player': '../js/background/player.js',
'playlists': '../js/background/playlists.js'
并在博客文章中明确要求玩家和您的测试运行规范。