【问题标题】:Unable to set baseUrl for intern-runner无法为实习生设置 baseUrl
【发布时间】:2014-07-07 21:08:41
【问题描述】:

我的项目遵循以下(简化的)目录结构:

\
|- app
   |- script1.js
   |- script2.js
|- test
   |- intern.conf.js
   |- test.spec.js 

我在我的应用程序中使用 requirejs,因此app/ 目录下的所有脚本都具有相对于该文件夹的依赖项。

因为实习生baseUrl默认是根文件夹,所以app/下的脚本加载失败。

但是,将 loader 下的 baseUrl 设置为 'app' 或 '/app' 等等,会导致无法加载测试套件..

错误:无法从 ../test/intern.conf 加载模块 test/intern.conf.js(父级:*2)

我尝试将测试套件位置设置为“../test/test.spec.js”等等,但没有成功。

【问题讨论】:

    标签: javascript selenium-webdriver intern


    【解决方案1】:

    baseUrl 必须是所有模块(包括测试模块)通用的 基本 URL,因此在您的情况下,它是 apptest 目录的父目录。通常这意味着您将cd 到父目录并简单地从那里运行实习生,如intern-runner config=test/intern.conf,无需额外的加载程序配置。

    如果您确实需要额外的配置(例如,将app 定义为一个包),您的实习生配置文件中的加载程序配置不需要与您的应用程序中的加载程序配置相同,因此在实践中两者之间的任何差异都不应成为问题。您的应用程序入口点中将有一个配置适用于您的应用,而您的测试配置中将有一个配置适用于您的测试环境。

    相对 AMD 模块 ID 与模块本身相关,因此如果您的模块 app/script1 具有依赖关系 ./script2,它将正确加载 /root/app/script2.js,而不是 /root/script2.js。当您从 test/test.spec 模块加载 app/script1 时,只要您的 baseUrl 是父目录,您就可以要求 ../app/script1 (如果这有意义,即如果两者是同一个逻辑包的一部分)或app/script1(如果testapp 应该是两个不同的包)。

    【讨论】:

    • 我的问题是从script1 加载script2,导致在浏览器控制台中出现以下错误消息:Error: Error: Failed to load module script2 from /script2.js (parent: app/script1) at http://localhost:9000/__intern/node_modules/dojo/dojo.js:731
    • 对 script2 使用相对路径确实可以解决测试问题,但这样做是一种好习惯吗?
    • 您应该始终对属于同一包的模块使用相对模块 ID。这是模块可移植性的基石。如您所见,如果没有它,您的代码将完全不可移植,并且永远无法从预期的确切位置移动而不会完全损坏。
    【解决方案2】:

    我相信您可能需要在您的 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(){ ... });
    

    因为它将使用“测试”路径来找出该目录的位置。

    【讨论】:

    • 问题是实习生似乎也在使用 baseUrl,特别是将 baseUrl 设置为 '/app' 会在控制台中引入错误:Error: Failed to load module ../Users/miguel/project/test/intern.runner.conf from Users/miguel/project/test/intern.runner.conf.js (parent: *2)
    • 抱歉,我误解了实习生是一个文件名,而不是另一种 AMD 技术。我相信useLoader 在看过实习生之后会帮助解决这个问题。来源:github.com/theintern/intern/wiki/…github.com/theintern/intern/wiki/…
    猜你喜欢
    • 2013-05-14
    • 2012-07-26
    • 2015-10-13
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2016-07-07
    相关资源
    最近更新 更多