tutorial karma javascript node.js karma-runner karma-jasmine webpack

javascript - karma js tutorial



Karma/Jasmine agota el tiempo sin ejecutar las pruebas (9)

Cambié mi configuración de Karma, a

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

También tengo 200-300 pruebas, PhantomJS 1.9.8 y solo necesita alrededor de 100 mb de memoria para Phantom con ronco y karma. Todos juntos usaron unos 300 MB de memoria.

Estoy intentando ejecutar Karma / Jasmine de Grunt en un proyecto generado con http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/

Karma lanza PhantomJS (o Chrome) y, dependiendo de singleRun, se agota el tiempo de espera o simplemente se queda allí y no hace nada. Intenté cambiar captureTimeout y browserNoActivityTimeout base a las soluciones de lectura de personas con problemas similares, pero parece que no funciona.

Mis versiones relevantes de pacakge, etc .:

  • NodeJS: 0.10.25
  • Karma: 0.12.16
  • Webpack: 1.1.11
  • webpack-dev-server: 1.4.1
  • karma-jazmín: 0.1.5
  • Linux: Ubuntu 14.04

Encontré a alguien con el mismo problema en OS X:

Intenté actualizar todas mis dependencias de desarrollo a las últimas versiones, pero el problema aún persiste.

La salida de mi consola está abajo. Las líneas de paquete web que hacen referencia al paquete ahora son VÁLIDAS / NO VÁLIDAS son preocupantes, pero no puedo encontrar ninguna información sobre su significado. Aquí está la salida de mi consola:

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.

Aquí está mi archivo 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 }); };


Compruebe que el localhost apunta correctamente a 127.0.0.1 y no a una IP inalcanzable, esto puede suceder en entornos de desarrollo que usan máquinas virtuales, por ejemplo.


Elimine los ''require'' del archivo de configuración de karma, solo use frameworks: [''jazmín''].


En mi caso, no había incluido el siguiente código en mi archivo test.js:

requirejs.config({ callback: window.__karma__.start }); describe(''tests'', function() { ...

Una vez que se incluyó esta configuración, las pruebas comenzaron a ejecutarse. ¡Con suerte, esto le ahorra a otra persona mucho estrés!


Encontramos un problema similar en nuestros servidores de compilación.

Aumentar el browserNoActivityTimeout trabajó hasta cierto punto. Lo aumentamos a 60000 ms, pero el problema con el fantasma que no se desconecta se devuelve a medida que aumenta el número de pruebas unitarias.

Finalmente rastreamos el problema hasta la RAM disponible para phantomJS. Tuvimos pruebas de 1100 unidades que tardarían ~ 1m30s en ejecutarse, pero phantomJS no se desconectaría dentro del tiempo de espera de 60000ms.

La RAM de VM de nodo de compilación aumentó de 2 GB a 4 GB y las pruebas de 1100 unidades tardaron aproximadamente 45 segundos en ejecutarse y el fantasma JS se desconectaría con ~ 5 segundos. Una gran mejora.

Hay dos lecciones: 1. PhantomJS tiene mucha memoria, así que asegúrese de que tenga suficiente RAM para hacerlo. 2. Perfile su código para saber dónde puede ser más eficiente con el uso de la memoria.


Lo solucioné para mi propio entorno. Tenía un montón de paquetes nodej instalados globalmente. No hice una regresión para averiguar exactamente qué paquete causó el problema, pero sospecho fuertemente que tener karma instalado globalmente fue la causa.

Si tienes este problema, prueba

sudo npm -g remove karma

y si eso no funciona, entonces eliminaría todos los paquetes de nodos globales (excepto paquetes verdaderamente globales como yeoman, grunt-cli, por ejemplo). Y luego instálelo localmente para su proyecto.

También noté que cuando ejecuta sudo npm -i en OS X, cambia el propietario de ~ / .npm a raíz y los siguientes comandos npm -i fallarán con un error de EACCESS .


Otra explicación probable es RequireJS en el camino. Obtengo este error exacto si agrego ''requirejs'' a karma.conf.js en la matriz config.frameworks. Esto parece anular la función de solicitud nativa y hacer que las pruebas no se ejecuten. En mi caso, se desencadenó el bloque de descripción, pero ninguno si los bloques it fueron.


Puede que este no sea el caso para el OP aquí, pero si el código que está probando golpea un bucle infinito, causará una desconexión en tiempo de espera como este.


Yo tuve el mismo problema. De un Issue relacionado de GitHub , aprendí que puedes extender el tiempo de inactividad.

Establezca esta opción de configuración de Karma en su archivo gruntfile o karma config:

browserNoActivityTimeout: 100000

Lo ajusté a 100 segundos y mis pruebas se ejecutaron con éxito. No sé qué está causando el retraso.