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は定義されていません
テストケース内で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
が定義され、テストケースが正常に実行されます
カルマのbinディレクトリ内にあるものを拾っているグロブパターンを使用している可能性があります。絶対パスを使用してテストを実行し、修正されるかどうかを確認してください。
もしそうなら、あなたはあなたのグロブパターンがあなたが望んでいないものをつかんでいることを知っています。
変更例
{pattern: '**/**/*_test.js'},
に
{pattern: 'stuff/dashboard/home-page_test.js'},
それで問題が解決するかどうかを確認してください。
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
お役に立てれば。
今日、同様の問題に遭遇しました。私の場合、解決策は非常に簡単でした。 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を必要に応じてコピーして貼り付けることができます。
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を使用
そのためにwebpackを使用します。将来のプロジェクトのために時間を節約するために、npmに構成を公開しました。ただ走れ npm install webpack-karma-jasmine
、およびdocsで説明されているようにwebpackとkarmaの設定ファイルを作成します。 https://www.npmjs.com/package/webpack-karma-jasmine