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

时间:2015-02-20 00:11:32

标签: intern istanbul

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

<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浏览器,我看到我的单元测试正在运行并传入浏览器内容。然而,控制永远不会回到终端/命令窗口 - 我没有看到类似&#34; 634/634测试通过&#34;或者其他什么,我必须按Ctrl + C来杀死实习生流程。当然,不会生成代码覆盖文件。这可能是我的文件结构吗? Intern文件与这些单元测试位于一个完全独立的目录中 - 我不是从一个公共父目录调用实习库和单元测试文件(以及他们正在测试的产品文件)的内部运行器。

我可以创建一个图表来说明文件/目录结构,如果这很重要的话。请注意,我确实更改了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

即,我改变的是插入额外的&#34;实习生-2.2.2&#34; &#34;实习生&#34;以及&#34; .bin&#34;之后的目录包含intern-runner.cmd的目录是&#34; intern-2.2.2&#34;的对等体。希望这不会令人困惑。 :(

请注意&#34; proxyUrl&#34; config属性表示单元测试文件和产品文件可从Web服务器获得的URL。我是否通过为此目的配置proxyUrl来做到这一点?如果我省略它,则没有运行,因为默认使用的是localhost:9000。我在&#34;配置实习生&#34;关于Github的文章,proxyUrl是&#34;检测代理的URL,&#34;但我真的不明白这意味着什么。

1 个答案:

答案 0 :(得分:0)

看起来你的进步非常好。你的目录结构有点不标准(任何特殊的原因?),但这不应该是一个显示阻止。您看到的问题可能是由于代理配置错误造成的。实习生正在加载测试客户端和您的单元测试,但浏览器中的代码无法将测试结果传回实习生。

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

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

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

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