【问题标题】:Running w/ intern-runner: nothing outputted to terminal, no code coverage data运行 w/intern-runner:没有输出到终端,没有代码覆盖率数据
【发布时间】:2015-02-20 00:11:32
【问题描述】:

我正在通过实习生运行脚本启动基于实习生的测试,如下所示:

<full_path>\intern\.bin\intern-runner config=unittest/intern

我的 unittest\intern.js 配置文件包含以下内容:

define({
reporters: [ "junit", "console", "lcovhtml", "runner" ],
excludeInstrumentation: /(?:dojo|intern|istanbul|reporters|unittest)(?:\\|\/)/,
suites: [ "unittest/all_intern.js" ],
forDebug: console.log("Customized intern config for test runner loaded successfully!"),
loader: {
  packages: [
             { name: 'resources', location: 'abc/resources' },
             { name: 'stats', location: 'abc/resources/stats' },
             { name: 'nls', location: 'abc/nls' },
             { name: 'widgets', location: 'abc/widgets' },
             { name: 'views', location: 'abc/views' },
            ]
},

useLoader: {
  'host-browser': 'node_modules/dojo/dojo.js'
},
tunnel: 'NullTunnel',
useSauceConnect: false,
webdriver: {
  host: 'localhost',
  port: 4444
},
proxyUrl: "http://localhost:8010/",
environments: [
               {
                   browserName: 'chrome'
               }
           ]

});

终端/命令窗口的输出看起来很有希望:

Customized intern config for test runner loaded successfully!
Listening on 0.0.0.0:9000
Starting tunnel...
Initialised chrome 40.0.2214.111 on XP

Chrome 浏览器确实启动了,我看到我的单元测试正在运行并传入浏览器内容。但是,控制永远不会回到终端/命令窗口——我看不到“634/634 测试通过”之类的东西,我必须按 Ctrl+C 来终止实习生运行程序。当然,不会生成代码覆盖率文件。这可能是由于我的文件结构吗? Intern 文件位于与这些单元测试完全不同的目录中——我没有从 Intern 库和单元测试文件(以及它们正在测试的产品文件)的公共父目录中调用 intern-runner。

如果这很重要,我可以创建一个图表来说明文件/目录结构。请注意,我确实稍微改变了 Intern 结构,例如:

<Dir_123>\intern\intern-2.2.2\bin\intern-runner.js
<Dir_123>\intern\intern-2.2.2\lib\<all_the_usual>
<Dir_123>\intern\intern-2.2.2\node_modules\<all_the_usual>
<Dir_123>\intern\.bin\intern-runner.cmd

也就是说,我所做的改变是在“intern”之后插入一个额外的“intern-2.2.2”目录,包含intern-runner.cmd的“.bin”目录是“intern-2.2.2”的对等体”。希望这不会令人困惑。 :(

请注意,“proxyUrl”配置属性表示单元测试文件和产品文件可从 Web 服务器获得的 URL。通过为此目的配置proxyUrl,我做得对吗?如果我省略它,则不会运行,因为使用的默认值是 localhost:9000。我在 Github 上的“配置实习生”文章中看到 proxyUrl 是“检测代理的 URL”,但我不太明白这是什么意思。

【问题讨论】:

    标签: intern istanbul


    【解决方案1】:

    看起来你取得了不错的进展。您的目录结构有点不标准(有什么特别的原因吗?),但这不应该是一个阻碍。您看到的问题可能是由于代理配置错误。 Intern 正在加载测试客户端和您的单元测试,但浏览器中的代码无法将测试结果传回给 Intern。

    正如您所提到的,proxyUrl 参数是可以找到 Intern 检测代理的 URL。 “仪器代理”基本上只是一个 HTTP 服务器,Intern 运行它来提供测试文件并从被测浏览器接收信息。 (它还检测 JS 文件,因为它为它们提供收集代码覆盖率数据的服务,因此是名称的“检测”部分。)默认情况下,它位于 localhost:9000。这意味着在 localhost 上运行的被测浏览器可以 GET 或 POST 到 localhost:9000 与 Intern 交谈。

    您还可以在另一台服务器(如 nginx)后面运行 Intern,并让该服务器代理向 Intern 请求。在这种情况下,您需要 1) 将 Intern 的 proxyUrl 设置为代理服务器的地址,以及 2) 在服务器中设置代理规则以将请求传递回位于 localhost:9000 的 Intern。

    Intern 还有一个proxyPort 参数来控制检测代理服务的端口。代理侦听localhost:&lt;proxyPort&gt;,其中proxyPort 默认为9000。如果测试直接与Intern 的代理通信(没有中间nginx 或Apache 或任何东西),proxyPort 将与proxyUrl 中的端口相同。如果正在使用中间服务器,则两者可以具有不同的值。

    当intern-runner 运行单元测试时,它告诉测试浏览器获取&lt;proxyUrl&gt;/client.html?config=...。由于您有一些外部服务器正在运行并且您已将proxyUrl 设置为该服务器的地址,该服务器将提供client.html 和其他相关的实习生文件,从而允许单元测试运行。但是,当单元测试完成并且浏览器尝试通过proxyUrl 将其传回给 Intern 时,除非您已将外部服务器配置为将请求代理回localhost:&lt;proxyPort&gt;,否则它将失败。

    【讨论】:

    • 哦,我没有意识到实习生启动了代理服务器! (从 lib/createProxy 开始?)我在我的配置中注释掉 proxyUrl 属性并运行,虽然我可以看到 client.html 服务正常,但我知道查找产品文件和它们引用的 Dojo 模块会有问题(不是在实习生的副本中)——因为我看不到实习生代理如何提供这些文件。听起来我需要一个反向代理。与实习生一起运行时涉及额外的 Web 服务器是否不寻常?网络上有这种配置的例子吗?
    • 在辅助 Web 服务器后面运行 Intern 并不少见。但是,Intern 仍然需要通过它的代理为您的应用程序文件提供服务以收集覆盖率数据,因为它是 Intern 在为文件提供服务时插入到文件中的工具来生成这些数据。
    • 正如我所担心的,当某些东西试图解析测试引用的“dojo/topic”之类的模块时,我会得到 404。代理服务器如何理解如何提供非实习生 Dojo 文件?我尝试在配置文件中添加 loader.packages { name: 'dojo', location: '../../../build/dojo/dojo'} 这是相对于配置位置的文件路径文件,当然这不起作用。我很惊讶服务器可以找到我的单元测试和产品文件;如何告诉服务器,“这些是 Dojo 文件所在的位置?”我不希望我的测试使用 Intern Dojo。
    • 当我阅读新用户指南(“通用配置”)中关于 baseUrl 的内容时,我明白了如何让代理服务器为我的 Dojo 文件提供服务。谢谢作者!但是现在我回到了运行器进程挂起的问题,尽管终端和浏览器显示了测试结果。 Chrome 控制台显示由 webdriver.js 记录的“测试完成”,但终端永远不会输出带有“% Stmts”、“% Branches”等的表,并且该过程在我杀死它之前不会结束。我没有像上次那样看到任何 404(当我不必要地运行自己的 Web 服务器时)。还有什么可能是错的?实习生结束会议的内容是什么?
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2014-06-27
    • 2015-08-22
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多