カバレッジ(karma-coverageを使用)とwebpack(karma-webpackを使用)でユニットテストを実行しようとしています。テストは期待どおりに実行されますが、カバレッジレポートを生成するには、実際のソースファイル(テストではない)をロードし、coverage
とwebpack
プリプロセッサを通過させる必要があります。ユニットテストkarmaとwebpack:_karma_webpack_ - そのようなファイルやディレクトリなし
は、残念ながら、これは次のエラーで失敗します。
ERROR [karma]: { [Error: no such file or directory]
code: 'ENOENT',
errno: 34,
message: 'no such file or directory',
path: '/_karma_webpack_/views/Foo/Foo.js' }
Error: no such file or directory
Foo.js
は、ソースを含むファイルです。ディレクトリ構造はこのようなものです:
karma.conf.js
- src/
- js/
- views/
- Foo/
- Foo.js
- test/
- FooTest.js
karma.conf.js
:
module.exports = function (config) {
config.set({
basePath: 'src/js/',
frameworks: ['jasmine'],
files: [
'**/test/*Test.js',
'**/Foo.js',
],
exclude: [],
preprocessors: {
'**/test/*Test.js': ['webpack'],
'**/Foo.js': ['webpack', 'coverage'],
},
coverageReporter: {
type: 'html',
dir: 'coverage',
},
webpack: {
resolve: {
alias: [
{ _karma_webpack_: 'src/js' },
],
},
},
reporters: ['progress', 'coverage'],
port: 9876,
colors: true,
logLevel: config.LOG_DEBUG,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity,
});
};
問題が明らかです:パス/_karma_webpack_/views/Foo/Foo.js
は確かに存在していません。私はそれがいくつかの内部のパスだと思いますが、私はこれをどのように変更できますか?
私はすでにこれについてwebpack resolveオプションを使用しようとしましたが、動作しません。エラーメッセージにはERROR [karma]
が記載されているので、このエラーが異なる可能性もあると私は少し気にしています。
また、グロブリングパターン**/Foo.js
がオフになっている可能性がありますが、いくつかの変更を試してみてください(**/**/Foo.js
など)も役に立ちませんでした。
を試してみてください。テストコードに構文エラーまたはrequire()文がないかどうかを確認してください。この問題は、webpackのエラーメッセージが表示されないことによって悪化します。私はkarma-webpackにwebpackが実行される正確なエラーを吐き出す方法を見つけようとしています –
はい@SohanJainこれは私に起こりました。しかし、私のテストをローカルで実行すると、Travis上でテストをリモートで実行する際に抑制されていたエッジケースのモジュール命名衝突警告が明らかになりました。 –