我的项目遵循以下(简化)目录结构:
\
|- app
|- script1.js
|- script2.js
|- test
|- intern.conf.js
|- test.spec.js
我在我的应用程序中使用requirejs,因此app/
目录下的所有脚本都具有相对于该文件夹的依赖关系。
由于Intern baseUrl默认为根文件夹,因此app/
下的脚本无法加载。
但是,将loader下的baseUrl设置为'app'或'/ app'等等会导致无法加载测试套件。
错误:无法加载模块../test/intern.conf test / intern.conf.js(parent:* 2)
我尝试将测试套件位置设置为“../test/test.spec.js”等等,但没有成功。
答案 0 :(得分:2)
baseUrl
必须是所有模块(包括测试模块)通用的基本URL ,因此在您的情况下将是app
和{{1}的父目录目录。通常这意味着您将test
到父目录并从那里简单地运行Intern,如cd
,而不需要额外的加载器配置。
如果确实需要额外配置(例如,将intern-runner config=test/intern.conf
定义为包),则Intern配置文件中的加载程序配置不需要与应用程序中的加载程序配置相同,因此在实践中,两者之间的任何差异都不应成为问题。您的应用程序入口点中将有一个适用于您的应用程序的配置,以及适用于您的测试环境的测试配置中的一个配置。
相对AMD模块ID与模块本身相关,因此如果模块app
具有依赖关系app/script1
,则它将正确加载./script2
,而不是/root/app/script2.js
。当您从/root/script2.js
模块加载app/script1
时,只要您的test/test.spec
是父目录,您就可以要求baseUrl
(如果这是有意义的,即如果这两个是同一逻辑包的一部分)或../app/script1
(如果app/script1
和test
应该是两个不同的包。)
答案 1 :(得分:0)
我相信您可能需要在requirejs配置对象中设置一些路径。它允许您加载baseUrl目录之外的脚本。因此,您仍然可以通过路径别名(http://requirejs.org/docs/api.html#jsfiles)在测试目录中加载时将baseUrl设置为“app”。
在下面的示例中,“app”和“test”都与requirejs.config调用一起位于根目录,因此使用“/ test”可以正常工作。您也可以使用“../”文件不在根目录中。
requirejs.config({
baseUrl: "/app",
paths: {
"test" : "/test"
},
});
这将允许您通过以下方式要求测试文件:
define(["test/test.spec.js"], function(){ ... });
因为它将使用“测试”路径来找出该目录的位置。