web-dev-qa-db-fra.com

Karma n'exécute aucun test unitaire

Je semble avoir un problème pour que mes tests unitaires Jasmine s'exécutent réellement. J'ai vérifié que tous mes scripts sont chargés en définissant le logLevel sur LOG_DEBUG. Mon test unitaire est identique au test des services @ https://github.com/angular/angular-seed/blob/master/test/unit/servicesSpec.js .

De plus, j'ai utilisé Testacular (avant qu'il ne soit renommé Karma) et je ne me souviens pas d'avoir ce problème. Il me semble que Chrome s'exécute, mais je dois appuyer manuellement sur un bouton "Déboguer". Même lorsque j'appuie sur ce bouton, mes tests ne s'exécutent pas.

Détails du système:

  • Windows 7
  • Nœud v0.10.4
  • Chrome 26.0.14
  • Karma 0.8.5 (installé avec 3 avertissements - 2 pertes de précision et un 'pas de définition pour la fonction en ligne v8 :: Persistent v8 :: Persistent :: New (v8 :: Handle)')

Voici mon code de module (Scripts/main.js):

angular.module('sb.services', []).value('version', '0.0.1').value('amplify', amplify);
angular.module('sb.directives', []);
angular.module('sb.filters', []);
angular.module('sb.controllers', []).controller('SbController', [
    '$scope', 
    'amplify', 
    function ($scope, amplify) {
        $scope.message = 'Hello World! (amplify exists?=' + !!amplify + ')';
    }
]);
angular.module('sb', [
    'sb.services',
    'sb.directives',
    'sb.filters',
    'sb.controllers'
]);

Voici mes spécifications (Test/unit/servicesSpec.js):

'use strict';

describe('my services', function () {
    beforeEach(module('sb.services'));

    describe('version', function () {
        it('should return current version', inject(function(version) {
            expect(version).toEqual('0.0.1');
        }));
    });
});

Voici mon fichier karma.conf.js:

// Karma configuration
// Generated on Mon Apr 15 2013 20:56:23 GMT-0400 (Eastern Daylight Time)


// base path, that will be used to resolve files and exclude
basePath = '';


// list of files / patterns to load in the browser
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'Vendor/angular-1.0.6/angular.js',
  'Vendor/angular-1.0.6/angular-*.js',
  'Vendor/json2/json2.js',
  'Vendor/jquery/jquery-1.8.2.js',
  'Vendor/amplify/amplify.js',
  'Scripts/main.js',
  'Test/unit/*.js'
];


// list of files to exclude
exclude = [

];


// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];


// web server port
port = 9876;


// cli runner port
runnerPort = 9100;


// enable / disable colors in the output (reporters and logs)
colors = true;


// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_WARN;


// enable / disable watching file and executing tests whenever any file changes
autoWatch = false;


// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['Chrome'];

junitReporter = {
    outputFile: 'Test/out/unit.xml',
    suite: 'unit'
};


// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;


// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
25
Darren

Ma dernière réponse était fausse (déplacer les lignes JASMINE et JASMINE_ADAPTER sous les lignes angular.js). Il a résolu ce problème particulier, mais a créé d'autres problèmes. Au lieu de cela, ce que j'ai fait pour le réparer était de spécifier uniquement le fichier angular-mocks, au lieu de angular- *, comme ceci:

   JASMINE,
   JASMINE_ADAPTER,
  'Vendor/angular-1.0.6/angular.js',
  'Vendor/angular-1.0.6/angular-mocks.js',
  'Vendor/json2/json2.js',
  'Vendor/jquery/jquery-1.8.2.js',
  'Vendor/amplify/amplify.js',
  'Scripts/main.js',
  'Test/unit/*.js'
12
Ryan Quinn

J'ai juste eu le même problème et j'ai découvert que je devais régler autoWatch = true avant que Karma n'exécute les tests automatiquement.

15
Sly_cardinal

Vous pouvez également utiliser la section d'exclusion dans votre karma.conf.js

exclude = [
  'Vendor/angular-1.0.6/angular-scenario.js'
];
14
Darren

J'ai essayé tout dessus sans succès, jusqu'à ce que finalement ...

Dans mon karma.conf.js J'ai supprimé la dépendance requirejs, par exemple:

    frameworks: ['jasmine', 'requirejs'],

à:

    frameworks: ['jasmine'],
8
KevBrew

Si vous essayez de résoudre ce problème en utilisant JASMINE et JASMINE_ADAPTER, cela n'est plus pris en charge (au moins sur Karma version 0.10.2).

Utilisez plutôt:

frameworks: ['jasmine']

dans votre fichier de configuration Karma. Vous pouvez lire à ce sujet ici .

J'ai également constaté que dans mon tableau de fichiers, j'avais défini included: false pour un motif. included n'est utilisé que si vous souhaitez inclure manuellement vos fichiers Javascript (par exemple si vous allez utiliser require.js). Si tous vos tests seront chargés à partir de ce modèle, vous verrez un message similaire à:

PhantomJS 1.9.2 (Linux): Executed 0 of 0 ERROR (0.151 secs / 0 secs)

puisque le fichier contenant les tests n'est jamais inclus. Suppression du included: false du tableau de fichiers pour mon modèle a corrigé ce problème puisque la valeur par défaut si elle n'est pas spécifiée est true.

7
SnapShot

Dans mon cas, singleRun a été défini sur false

Solution: // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true

3
vladCovaliov