我正在尝试使用生成的项目从Grunt运行Karma / Jasmine http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/
Karma推出PhantomJS(或Chrome),并且根据singleRun,它要么超时要么只是坐在那里什么都不做。我尝试根据有类似问题的人阅读解决方案来更改captureTimeout
和browserNoActivityTimeout
,但似乎无效。
我的相关pacakge版本等:
我在OS X上找到了someone with the same problem:
我已尝试将所有dev依赖项更新到最新版本,但问题仍然存在。
我的控制台输出如下。引用包的webpack行现在是VALID / INVALID 令人担忧,但我找不到任何关于它们含义的信息。这是我的控制台输出:
Running "karma:unit" (karma) task
DEBUG [config]: autoWatch set to false, because of singleRun
DEBUG [plugin]: Loading karma-* from /home/ed/workspace/wwb-app/node_modules
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-chrome-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-coffee-preprocessor.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-firefox-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-html2js-preprocessor.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-jasmine.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-requirejs.
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-script-launcher.
DEBG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-webpack-plugin.
INFO [karma]: Karma v0.12.16 server started at http://localhost:8080/
INFO [launcher]: Starting browser PhantomJS
DEBUG [temp-dir]: Creating temp dir at /tmp/karma-98204612
DEBUG [launcher]: /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs /tmp/karma-98204612/capture.js
Hash: 89285186567c1bc5bb7f
Version: webpack 1.1.11
Time: 2ms
Asset Size Chunks Chunk Names
webpack: bundle is now VALID.
webpack: bundle is now INVALID.
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/client.html
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/karma.js
DEBUG [web-server]: upgrade /socket.io/1/websocket/CjC8pnQq5It2z_kWYB98
DEBUG [karma]: A browser has connected on socket CjC8pnQq5It2z_kWYB98
INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket CjC8pnQq5It2z_kWYB98 with id 98204612
DEBUG [launcher]: PhantomJS (id 98204612) captured in 1.704 secs
WARN [PhantomJS 1.9.7 (Linux)]: Disconnected (1 times), because no message in 30000 ms.
DEBUG [karma]: Run complete, exitting.
DEBUG [launcher]: Disconnecting all browsers
DEBUG [launcher]: Process PhantomJS exited with code 0
DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-98204612
Warning: Task "karma:unit" failed. Use --force to continue.
Aborted due to warnings.
这是我的karma.conf.js
文件:
'use strict';
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
'test/helpers/**/*.js',
'test/spec/components/**/*.js'
],
preprocessors: {
'test/spec/components/**/*.js': ['webpack']
},
webpack: {
cache: true,
module: {
loaders: [{
test: /\.css$/,
loader: 'style!css'
}, {
test: /\.gif/,
loader: 'url-loader?limit=10000&minetype=image/gif'
}, {
test: /\.jpg/,
loader: 'url-loader?limit=10000&minetype=image/jpg'
}, {
test: /\.png/,
loader: 'url-loader?limit=10000&minetype=image/png'
}, {
test: /\.js$/,
loader: 'jsx-loader'
}]
}
},
webpackServer: {
stats: {
colors: true
}
},
exclude: [],
port: 8080,
logLevel: config.LOG_DEBUG,
colors: true,
autoWatch: true,
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers: ['PhantomJS'],
reporters: ['progress'],
captureTimeout: 60000,
browserNoActivityTimeout: 60000,
singleRun: true
});
};
答案 0 :(得分:44)
我遇到了同样的问题。从相关的GitHub Issue,我了解到您可以延长不活动超时。
在gruntfile或karma配置文件中设置此Karma配置选项:
browserNoActivityTimeout: 100000
我将其设置为100秒,我的测试成功运行。我不知道造成延误的原因。
答案 1 :(得分:27)
我已将我的Karma配置更改为
captureTimeout: 60000, // it was already there
browserDisconnectTimeout : 10000,
browserDisconnectTolerance : 1,
browserNoActivityTimeout : 60000,//by default 10000
我还有200-300个测试,PhantomJS 1.9.8 Phantom只需要大约100 MB的内存 随着咕噜声和业力 他们一起使用了大约300mb的内存。
答案 2 :(得分:16)
我们在构建服务器上遇到了类似的问题。
增加browserNoActivityTimeout工作到一定程度。我们把它增加到60000毫秒,但是随着单元测试数量的增加,phantomJS没有断开连接的问题又回来了。
我们最终将问题追溯到phantomJS可用的RAM。我们进行了1100次单元测试,需要大约1m30秒才能运行,但是phantomJS在60000ms超时内无法断开连接。
构建节点VM RAM从2GB增加到4GB,然后1100单元测试需要大约45s才能运行,phantomJS将与~5s断开连接。一个巨大的进步。
有两个教训: 1. PhantomJS是内存饥渴,所以要确保它有足够的RAM来做它的事情 2.分析您的代码,了解在内存使用方面哪些方面更有效率。
答案 3 :(得分:6)
另一个可能的解释是RequireJS妨碍了。如果我将'requirejs'添加到config.frameworks数组中的karma.conf.js,我会收到这个确切的错误。 这似乎覆盖了本机require函数,导致测试无法执行。在我的情况下,describe-block被触发,但是如果它是块,则没有。
答案 4 :(得分:4)
就我而言,我的test.js文件中没有包含以下代码:
requirejs.config({
callback: window.__karma__.start
});
describe('tests', function() {
...
包含此配置后,测试开始运行。希望这能给别人带来很大的压力!
答案 5 :(得分:3)
从karma配置文件中删除'requires',只需使用frameworks:['jasmine']。
答案 6 :(得分:2)
检查localhost
是否正确指向127.0.0.1
而不是无法访问的IP,这可能发生在使用虚拟机的开发环境中。
答案 7 :(得分:1)
我为自己的环境解决了这个问题。我有一堆全局安装的nodejs包。我没有进行回归以确定究竟是什么包引起了问题,但我强烈怀疑全局安装业力是原因。
如果您遇到此问题,请尝试
sudo npm -g remove karma
如果这不起作用,那么我将删除所有全局节点包(例如,如yeoman,grunt-cli等真正的全局包)。然后在本地为您的项目安装。
我还注意到,当您在OS X上运行sudo npm -i
时,它会将 〜/ .npm 的所有者更改为 root 和后续npm -i
命令将因 EACCESS 错误而失败。
答案 8 :(得分:1)
这可能不是OP的情况,但如果您测试的代码遇到无限循环,则会导致超时断开,就像这样。
答案 9 :(得分:0)
这就是为什么我遇到此错误,可能会帮助处于类似情况的人。 我的主要组件有多个使用不同服务的子组件,其中一个服务进行了HTTP调用,初始化失败,因为我在子组件的ngInit()方法中使用了该服务。 要解决此问题,我必须在主要组件规格中导入上述服务,并为该服务附加一个模拟程序,之后该程序便开始工作。
答案 10 :(得分:0)
@Vijender的回答使我走上了正轨
这就像将测试中的HttpClientModule
替换为HttpClientTestingModule
一样简单。
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule
]
}).compileComponents();
}));