48

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 が定義されていません

4

7 に答える 7

51

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

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

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

karma.conf.js を更新する

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

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

于 2015-06-11T13:06:52.863 に答える
24

カルマの bin ディレクトリ内のものを取得する glob パターンを使用している可能性があります。絶対パスを使用してテストを実行し、問題が解決するかどうかを確認してください。

もしそうなら、グロブパターンが望んでいないものをつかんでいることがわかります。

たとえば、変更

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

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

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

于 2014-11-11T19:27:30.283 に答える
2

今日、同様の問題に遭遇しました。私の場合、解決策は非常に簡単でした。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 全体をコピーして貼り付けることができます。

于 2016-12-25T17:42:40.813 に答える
0

そのためにwebpackを使用しています。将来のプロジェクトのために時間を節約するために、構成を npm に公開しました。を実行npm install webpack-karma-jasmineして、ドキュメントの説明に従って webpack と karma の構成ファイルを作成します: https://www.npmjs.com/package/webpack-karma-jasmine

于 2017-07-31T18:08:42.683 に答える