几件事。首先,您没有说您使用的是 Linux Mac 还是 Windows。看,平台之间的事情会发生变化。由于我使用的是 Windows,我会假设:P
另外,您没有说您使用的是哪个版本的 Meteor、sanjo:jasmine、Karma (...)。看,版本之间的事情也会发生变化:) 我假设您正在使用:meteor 1.1.0.3 和 sanjo:jasmine 0.17(以及由 sj:0.17 自动拉取的 Karma)——因为我注意到该组合存在相同的问题。
我最近与此作斗争,您可以在此处阅读详细信息。
简而言之 - 让我们从弹出窗口开始:默认情况下,当使用 Chrome 作为运行器目标时,在 Windows 上实际上有两个弹出窗口:带有 nodejs 的控制台和带有 Chrome 的窗口。你想摆脱两者。根据我的检查,隐藏nodejs控制台窗口需要对meteor/long-running-child-process (即补丁#1)的代码进行小的更改。然后,您可以通过添加一些命令行参数来“隐藏”Chrome,告诉它远离屏幕区域,这需要对 sanjo:jasmine 生成的 Karma 配置进行小幅更新 -请参阅此补丁(这是补丁#2)。我在 Windows 上使用了这两个更改,并且效果很好。在这些补丁成熟并且 sanjo 决定使用它们之前,使用它们的唯一方法是从 github 下载代码,合并这些补丁,然后使用本地 sanjo:jasmine 包而不是官方包。
当然,您可能想像其他人所说的那样放弃 Chrome 并获得 PhantomJS。如果您运行它,您将看不到“浏览器窗口”,因为 PhantomJS 没有显示任何内容。然而,在这个设置中,一旦选择了 PhantomJS 并且一旦它真正工作,你仍然会从我上面提到的 nodejs 获得控制台。你可以用我上面提到的补丁 #1 来摆脱它。
最后一件事 - 您未能将 PhantomJS 作为目标运行,因为大多数有用的建议都是错误的。目前(我的意思是 sanjo-jasmine:0.17/0.18)选择 PhantomJS 的正确方法是:
JASMINE_BROWSER=PhantomJS
仅此而已。没有一个词或一个点。这是因为该变量中的文本与这些字符串严格匹配:
'Chrome'
'ChromeCanary'
'Firefox'
'PhantomJS'
'SauceLabs'
'HiddenChrome' (that one works ONLY if using the second patch I mentioned)
还值得注意的是,Karma 支持一次使用多个目标(它可以同时启动和使用 Chrome和PhantomJS),但 sanjo:jasmine 目前一次只支持一个。尝试如下:
JASMINE_BROWSER=PhantomJS,Chrome
当前无法正常工作(->参见 ClientUnitTestFramework 的来源)