web-dev-qa-db-ja.com

カルマのジャスミンテスト:キャッチされないReferenceError:requireが定義されていません

KarmaはJSFileSpec.jsファイルの「require」ステートメントを認識できません。 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は定義されていません

44

テストケース内でrequire('module_name')(CommonJSスタイルモジュール)を使用し、Karmaを使用して実行しようとすると、同じ問題に直面していました。

理由は、ブラウザでrequire関数を使用できないためです(undefinedです)。ブラウザに提供するために、Karmaが karma-browserify を使用してブラウザでテストケースを実行する前に、テストjsファイルをブラウザ化できます。

npm install karma-browserify --save-devを使用してkarma-browserifyをインストールします

更新karma.conf.js

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

これらの変更の後、ブラウザーで確認されたファイルがKarmaによってブラウザーで実行され、requireが定義され、テストケースが正常に実行されます

46
Sandeep Kumar

カルマのbinディレクトリ内にあるものを拾っているグロブパターンを使用している可能性があります。絶対パスを使用してテストを実行し、修正されるかどうかを確認してください。

もしそうなら、あなたはあなたのグロブパターンがあなたが望んでいないものをつかんでいることを知っています。

変更例

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

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

それで問題が解決するかどうかを確認してください。

23
Gamebreaker

Karmaは、ブラウザーでテストを実行するテストランナーです。どのブラウザをセットアップしても、require関数が何であるかはわかりません。

ノードでjasmineを使用するには、jasmine-nodeを試してください。 https://github.com/mhevery/jasmine-node

カルマにジャスミンノードテストを実行させるには、jasmine-node-karmaを試してください(待ちます)。 https://npmjs.org/package/jasmine-node-karma

上記の情報を見つけたジャスミンwikiページを次に示します。 https://github.com/pivotal/jasmine/wiki

お役に立てれば。

7
Dave

今日、同様の問題に遭遇しました。私の場合、解決策は非常に簡単でした。 Webpack経由でBabelを使用して.jsxファイルを処理しています。 .jsx拡張子のファイルは正常にテストされましたが、単純な.jsファイルは参照エラーをスローしました。

誰もが類似または同等のセットアップを持っている場合、同じソリューションを共有できる可能性があります。

Karma.config.jsでは、.jsxファイルの場合と同様に、.jsファイルのプリプロセッサを指定する必要がありました。以下に例を示します。

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

私の場合、ブラウザで実行できるようにWebpackがコードをBabelに渡してコンパイルするように追加する方が良いでしょう。 webpack.config.jsとkarma.config.jsを必要に応じてコピーして貼り付けることができます。

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

webpackを使用

0
freedom

そのためにwebpackを使用します。将来のプロジェクトのために時間を節約するために、npmに構成を公開しました。ただ走れ npm install webpack-karma-jasmine、およびdocsで説明されているようにwebpackとkarmaの設定ファイルを作成します。 https://www.npmjs.com/package/webpack-karma-jasmine

0
Paweł