运行w/intern-runner:没有输出到终端,没有代码覆盖数据



我正在通过Intern-runner脚本启动基于Intern的测试,如下所示:

<full_path>intern.binintern-runner config=unittest/intern

我的unittest\inter.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>internintern-2.2.2binintern-runner.js
<Dir_123>internintern-2.2.2lib<all_the_usual>
<Dir_123>internintern-2.2.2node_modules<all_the_usual>
<Dir_123>intern.binintern-runner.cmd

即,我所做的更改是在"intern"之后插入一个额外的"intern-2.2."目录,而包含intern-runner.cmd的".bin"目录是"intern-2.2"的对等目录。希望不要混淆。:(

请注意,"proxyUrl"配置属性表示可从web服务器获得单元测试文件和产品文件的URL。通过为此目的配置proxyUrl,我做得对吗?如果省略它,则不会运行任何内容,因为使用的默认值是localhost:9000。我在Github上的"配置Internet"文章中看到proxyUrl是"插入代理的URL",但我真的不明白这意味着什么。

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

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

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

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

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

最新更新