2014-06-09 35 views
34

我试图从步兵与 http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/噶/茉莉花超时而不运行测试

噶生成的项目运行噶/茉莉推出PhantomJS(或Chrome),并根据singleRun,其超时或者只是坐在那里,什么都不做。我试着改变captureTimeoutbrowserNoActivityTimeout,基于来自具有类似问题的人的阅读解决方案,但似乎并不奏效。

我有关pacakge版本等:

  • 的NodeJS:0.10.25
  • 噶:0.12.16
  • 的WebPack:1.1.11
  • 的WebPack-dev的服务器:1.4.1
  • 卡玛 - 茉莉:0.1.5
  • Linux操作系统:Ubuntu的14.04

我在OS X上发现someone with the same problem

我试过更新我所有的开发依赖到最新版本,但问题仍然存在。

我的控制台输出如下。引用包的webpack行现在有效/无效令人担忧,但我无法找到任何有关它们的含义的信息。下面是我的控制台输出:

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 
}); 
}; 

回答

1

我解决了这个为我自己的环境。我在全局安装了一堆nodejs软件包。我没有做出回归来确切地找出问题所在,但我强烈怀疑是因为全球安装了业力是原因。

如果你有那么这个问题的尝试

sudo npm -g remove karma 

,如果不工作,那么我会删除所有的全球节点程序包(除了像自耕农,咕噜-CLI真正的全球性套餐为例)。然后在本地为您的项目安装。

我还注意到,当你在OS X上运行sudo npm -i,它改变〜/ .npm和随后npm -i命令的所有者将失败并EACCESS错误,。

38

我有同样的问题。从相关的GitHub Issue,我了解到您可以延长不活动超时时间。

设置您gruntfile或业力的配置文件这噶配置选项:

browserNoActivityTimeout: 100000 

我将它设置为100秒和我的测试运行成功。我不知道是什么原因造成延误。

+1

我试着玩超时没有成功。在全球安装业力时没有任何工作 – edoloughlin

+6

在webpack-karma的引擎下使用的'webpack-dev-middleware'仅在浏览器请求文件后编译资产。因此,*在浏览器加载了karma测试页面之后,开始编译,只有在这之后浏览器才会响应Karma。生产编译需要30〜45秒才能完成。 –

15

我们在构建服务器上遇到类似问题。

增加browserNoActivityTimeout工作到一个点。我们将其提高到60000ms,但随着单元测试次数的增加,幻像JS不断开的问题得以恢复。

我们最终跟踪问题下来提供给phantomJS的RAM。我们有1100个单元测试需要大约1分30秒的时间才能运行,但是在60000ms的超时时间内,phantomJS将无法断开连接。

构建节点虚拟机内存从2GB提高至4GB和1100次单元测试,然后把〜45S运行和phantomJS将与〜5秒断开。巨大的进步。

有两个教训:1。 是PhantomJS内存饿了,所以一定要确保它有足够的内存,它的事 2.简介您的代码,以了解在那里你可以与内存的使用更有效率。

+0

看来你可以使用'browserNoActivityTimeout:0',这似乎使它等待更长时间。在这一点上,Karma会永远等待还是有限制?这在'karma-runner.github.io'上没有很好的记录,谷歌也没有帮助其他地方。 – trysis

+12

PhantomJS的RAM在哪里(如何设置)? – Nick

+0

https://xkcd.com/979/。 @Gareth你是怎么做的? – Dylanthepiguy

6

另一个可能的解释是RequireJS阻碍。如果我将'requirejs'添加到config.frameworks数组中的karma.conf.js中,我会得到这个确切的错误。 这似乎覆盖本机require功能,并导致测试不执行。在我的情况下,描述块被触发了,但是如果它是块的话。

+0

原来这也是我的问题。谢谢! – lje

21

我改噶配置,以

captureTimeout: 60000, // it was already there 
browserDisconnectTimeout : 10000, 
browserDisconnectTolerance : 1, 
browserNoActivityTimeout : 60000,//by default 10000 

我也有200-300测试,PhantomJS 1.9.8 ,它需要大约只有100 MB内存幻影 随着呼噜声和因果报应 他们全部一起使用了大约300mb的内存。

+0

我的问题是詹金斯和captureTimeout。浏览器加载时间过长。 –

2

取下因缘配置文件中的“要求”,只要使用的框架:“茉莉花”。

+1

如果有人使用sinon和chai或其他人呢?你的建议会打破测试。 – nottinhill

+0

它实际上解决了我的问题。 –

4

在我来说,我没有列入我的test.js文件下面的代码:

requirejs.config({ 
    callback: window.__karma__.start 
}); 

describe('tests', function() { 
    ... 

一旦此配置被列入测试开始运行。希望这可以为别人节省很多的压力!

2

检查localhost正确指向127.0.0.1而不是无法访问的IP,这可能发生在使用虚拟机的开发环境中。

0

这可能不是这里的OP的情况下,但如果你正在测试的代码打一个死循环,这将导致超时就这样断开。