web-dev-qa-db-fra.com

tests de jasmin dans le karma: Uncaught ReferenceError: require n'est pas défini

Karma ne peut pas reconnaître l'instruction 'require' dans le fichier JSFileSpec.js. Lancer karma.conf.js:

(function() {
    describe("DummyEmitter creation", function(){
        return it("creation", function(){
            var DummyEmitter = require('Util.DummyEmitter');
            var dummy = new DummyEmitter('someName');
            return expect(dummy).toBeDefined();
        });
    });
})();

ReferenceError: require n'est pas défini

42
Igor Seliverstov

Je rencontrais le même problème lorsque j'essayais d'utiliser require('module_name') (modules de style CommonJS) dans un scénario de test et de l'exécuter à l'aide de Karma.

La raison en était que la fonction require n'est pas disponible pour le navigateur (elle est undefined). Pour le fournir au navigateur, nous pouvons parcourir les fichiers js testés avant que Karma n'exécute un scénario de test dans le navigateur à l'aide de karma-browserify .

Installez karma-browserify en utilisant npm install karma-browserify --save-dev

Mettre à jour karma.conf.js

 frameworks: ['jasmine', 'browserify'],
 preprocessors: {
    'app/tests/*.js': [ 'browserify' ]
 },
 plugins: [..., 'karma-browserify'],

Après ces modifications, le fichier browserified est exécuté dans le navigateur par Karma, dans lequel require est défini, et le scénario de test s'exécute correctement.

46
Sandeep Kumar

Vous utilisez peut-être un motif glob qui ramasse des éléments dans le répertoire bin de karma. Essayez d'exécuter vos tests en utilisant des chemins absolus pour voir si cela résout le problème.

Si tel est le cas, vous savez que votre motif global consiste à récupérer des éléments que vous ne vouliez pas.

Par exemple changer 

{pattern: '**/**/*_test.js'},

à

{pattern: 'stuff/dashboard/home-page_test.js'},

voyez si cela résout votre problème.

22
Gamebreaker

Karma est un lanceur de tests qui exécute vos tests dans un browser. Quel que soit le navigateur que vous avez configuré, il ne connaît pas la fonction requise. 

Pour utiliser jasmine avec node, essayez jasmine-node. https://github.com/mhevery/jasmine-node

Pour que le karma exécute des tests de noeud de jasmin, essayez (attendez ...) jasmine-node-karma. https://npmjs.org/package/jasmine-node-karma

Voici les pages jasmine wiki où j'ai trouvé les informations ci-dessus . https://github.com/pivotal/jasmine/wiki

J'espère que cela t'aides.

7
Dave

J'ai rencontré aujourd'hui un problème similaire. Dans mon cas, la solution était assez simple. J'utilise Babel via Webpack pour traiter les fichiers .jsx. Les fichiers portant l'extension .jsx ont été testés avec succès, tandis que les fichiers .js simples généraient une erreur de référence.

Si quelqu'un a une configuration similaire ou équivalente, il pourra peut-être partager la même solution.

Dans karma.config.js, je devais spécifier des préprocesseurs pour les fichiers .js, comme je l’ai fait pour les fichiers .jsx. Voici un exemple:

preprocessors: {
  "app/tests/**/*.test.jsx": ["webpack", "sourcemap"],
  "app/tests/**/*.test.js": ["webpack", "sourcemap"]
},

Je ferais mieux d'ajouter que, dans mon cas, Webpack transmet le code à Babel pour qu'il le compile afin qu'il puisse s'exécuter dans le navigateur. Je peux copier et coller l'intégralité de webpack.config.js et karma.config.js si quelqu'un en a besoin.

2
Carlo Rizzante
  module.exports = function(config) {
    config.set({

      basePath: '',


      frameworks: ['mocha', 'chai'],

      files: [
        'test/*.test.js'
      ],

      exclude: [
      ],

      preprocessors: {
        'test/*.test.js': ['webpack']
      },

      webpack: {
        mode: "none",
        module: {
          rules: [
            { test: /\.js?$/, loader: "babel-loader",  options: { presets: ["env"] }, }
          ]
        }
      },

      reporters: ['progress'],

      port: 9876,

      colors: true,

      logLevel: config.LOG_INFO,

      autoWatch: true,

      browsers: ['Chrome'],

      singleRun: false,

      concurrency: Infinity,

      browserNoActivityTimeout: 100000
    })
  }

utiliser webpack

0
user9805244

J'utilise webpack à cette fin. J'ai publié ma configuration sur npm afin de gagner du temps pour les projets futurs. Il suffit d’exécuter npm install webpack-karma-jasmine et de créer des fichiers de configuration pour webpack et karma comme décrit dans la documentation: https://www.npmjs.com/package/webpack-karma-jasmine

0
Paweł