LoginSignup
1
1

More than 5 years have passed since last update.

nycのカバレッジにwebpackでビルドしたソースが含まれるのを阻止する

Posted at

概要

自分のライブラリのカバレッジがとても低く、何故なんだろうと思っていて調べたのですが、webpack側で作ったソースが含まれていたのが原因でした。
今回はその対応するために結構苦労したのでメモしておきます。

webpackのソースが含まれている時のカバレッジ(間違い)

スクリーンショット 2018-10-01 17.33.05.png

自分のソースのみのカバレッジ(正しい)

スクリーンショット 2018-10-01 17.34.08.png

webpackでソースマップの出力をする

devtool: 'inline-source-map'って所です。この設定を有効化することによってビルドファイルの中にソースマップを含めることができます。
この設定をしないとnyc側で元のソースを辿って正しいカバレッジを取得することができません。注意しましょう。

var nodeExternals = require('webpack-node-externals');

module.exports = {
  mode: 'development',
  externals: [nodeExternals()],
  target: 'node',
  devtool: 'inline-source-map',
  entry: './src/main.js',
  output: {
    library: 'nomlish',
    libraryTarget: 'umd'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              presets: [
                '@babel/preset-env',
              ]
            }
          }
        ]
      }
    ]
  }
};

nycでビルド先ファイルを除外する

公式ドキュメント
package.jsonにnycの設定を記述し、ビルドファイルのカバレッジを計測しないようにします。ビルドファイルのパスを記述します。
私のソースの場合src/main.jsが自分で書いたソースなのでそれ以外は見る必要がありません。

  "nyc": {
    "exclude":["dist"]
  },

↓の画像ではwebpack→bootstrap、webpack→universalModuleDefinitionがカバレッジに含まれていますがこのソースがdist配下に存在するからですね。
スクリーンショット 2018-10-01 17.33.05.png

あとがき

ava公式のカバレッジ取得についての記述
nyc公式のカバレッジ取得についての記述
テストにはavaを使用していたのですが、どちらの公式ドキュメントにもwebpackとの併用ケースがなくこの対応だけにかなり苦労しました。
特殊なケースなのかもしれませんがやはりググっても記事は少なく、こういう時に公式ドキュメントから紐解いて問題を解決する能力が必要なんだなと実感しました。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1