web-dev-qa-db-fra.com

Karma / Jasmine expire sans exécuter de tests

J'essaye d'exécuter Karma/Jasmine depuis Grunt sur un projet généré avec http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/

Karma lance PhantomJS (ou Chrome) et, selon singleRun, il arrive à expiration ou reste là et ne fait rien. J'ai essayé de changer captureTimeout et browserNoActivityTimeout en fonction des solutions de lecture de personnes ayant des problèmes similaires, mais cela ne semble pas fonctionner.

Mes versions pacakge pertinentes, etc.:

  • NodeJS: 0,10,25
  • Karma: 0,12,16
  • Webpack: 1.1.11
  • webpack-dev-server: 1.4.1
  • karma-jasmin: 0,1,5
  • Linux: Ubuntu 14.04

J'ai trouvé quelqu'un avec le même problème sur OS X:

J'ai essayé de mettre à jour toutes mes dépendances de développement vers les dernières versions mais le problème persiste.

La sortie de ma console est ci-dessous. Les lignes du webpack faisant référence au bundle sont désormais VALIDES/INVALIDES sont inquiétantes, mais je ne trouve aucune information sur leur signification. Voici ma sortie console:

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.

Voici mon karma.conf.js fichier:

'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
});
};
44
edoloughlin

J'ai eu le même problème. À partir d'un problème GitHub , j'ai appris que vous pouvez prolonger le délai d'inactivité.

Définissez cette option de configuration Karma dans votre fichier de configuration gruntfile ou karma:

browserNoActivityTimeout: 100000

Je l'ai réglé à 100 secondes et mes tests ont réussi. Je ne sais pas ce qui cause le retard.

44
Matthias Dailey

J'ai changé ma configuration Karma en

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

J'ai également 200-300 tests, PhantomJS 1.9.8 et il n'a besoin que d'environ 100 Mo de mémoire pour Phantom With grunt et karma Ils ont tous ensemble utilisé environ 300 Mo de mémoire.

29
Anatoli Klamer

Nous avons rencontré un problème similaire sur nos serveurs de build.

L'augmentation du browserNoActivityTimeout a fonctionné jusqu'à un certain point. Nous l'avons augmenté à 60000 ms, mais le problème avec la non-déconnexion de phantomJS est revenu à mesure que le nombre de tests unitaires augmentait.

Nous avons finalement identifié le problème jusqu'au RAM disponible pour phantomJS. Nous avions 1100 tests unitaires qui prendraient environ 1m30s à exécuter, mais phantomJS ne parviendrait pas à se déconnecter dans le délai de 60000 ms.

Le nœud de construction VM RAM a été augmenté de 2 Go à 4 Go et les tests unitaires de 1100 ont ensuite mis environ 45 secondes à s'exécuter et phantomJS se déconnecterait avec environ 5 secondes. amélioration.

Il y a deux leçons: 1. PhantomJS est gourmand en mémoire, alors assurez-vous qu'il en a assez RAM pour faire son travail) 2. Profilez votre code pour savoir où vous pouvez être plus efficace avec l'utilisation de la mémoire.

16
Gareth

Une autre explication probable est que RequireJS se met en travers du chemin. J'obtiens cette erreur exacte si j'ajoute 'requirejs' au karma.conf.js dans le tableau config.frameworks. Cela semble remplacer la fonction require native et empêcher l'exécution des tests. Dans mon cas, le bloc décrit a été déclenché, mais aucun si les blocs it l'ont été.

7
Micros

Dans mon cas, je n'avais pas inclus le code suivant dans mon fichier test.js:

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

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

Une fois cette configuration incluse, les tests ont commencé à s'exécuter. Espérons que cela économise beaucoup de stress à quelqu'un d'autre!

4
garryp

Supprimez le 'requires' du fichier de configuration du karma, utilisez simplement les frameworks: ['jasmine'].

3
user5704261

Vérifiez que localhost pointe correctement vers 127.0.0.1 et pas une IP inaccessible, cela peut arriver dans des environnements de développement utilisant des machines virtuelles par exemple.

2
eloone

J'ai résolu cela pour mon propre environnement. J'ai eu un tas de paquets nodejs installés dans le monde. Je n'ai pas fait de régression pour déterminer exactement quel paquet a causé le problème, mais je soupçonne fortement que l'installation du karma dans le monde en est la cause.

Si vous rencontrez ce problème, essayez

Sudo npm -g remove karma

et si cela ne fonctionne pas, je supprimerais tous les packages de nœuds globaux (à l'exception des packages véritablement globaux comme yeoman, grunt-cli, par exemple). Et puis installez localement pour votre projet.

J'ai également remarqué que lorsque vous exécutez Sudo npm -i sur OS X, il change le propriétaire de ~/.npm en root et npm -i les commandes échoueront avec une erreur [~ # ~] eaccess [~ # ~] ,.

1
edoloughlin

Ce n'est peut-être pas le cas pour l'OP ici, mais si le code que vous testez frappe une boucle infinie, cela provoquera une déconnexion à l'expiration comme cela.

1
Todd Sjolander