2017-06-09 1 views
2

Après this guide, j'ai ajouté istanbul-instrumenter à ma configuration de test pour obtenir un rapport de couverture «dégroupé» qui montre le reste de mes fichiers. Cependant, le fichier de test fourni est toujours affiché, dans build/:Comment exclure le fichier généré de la couverture dans webpack

----------------------------|----------|----------|----------|----------|----------------| 
File      | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines | 
----------------------------|----------|----------|----------|----------|----------------| 
All files     | 70.78 | 36.36 | 69.23 | 60.95 |    | 
build      | 67.39 | 31.03 | 66.67 | 53.93 |    | 
    tests.js     | 67.39 | 31.03 | 66.67 | 53.93 |... 208,209,211 | 
src/routes/Home   |  100 |  75 |  100 |  100 |    | 
    index.js     |  100 |  75 |  100 |  100 |    11 | 
src/routes/Home/components |  100 |  75 |  100 |  100 |    | 
    HomeView.js    |  100 |  75 |  100 |  100 |    18 | 
----------------------------|----------|----------|----------|----------|----------------| 
✨ Done in 14.19s. 

Voici ma config de test jusqu'à présent. Je pensais que l'exclusion build dans la clause istanbul-instrumenter-chargeur ferait, mais il ne semble pas:

var nodeExternals = require('webpack-node-externals'); 
var path = require('path'); 
const ExtractTextPlugin = require('extract-text-webpack-plugin'); 

var project = require('../project.config'); 
const inProject = path.resolve.bind(path, project.basePath); 
const inProjectSrc = (file) => inProject(project.srcDir, file); 
const __DEV__ = project.env === 'development'; 

const extractStyles = new ExtractTextPlugin({ 
    filename: 'styles/[name].[contenthash].css', 
    allChunks: true, 
    disable: __DEV__ 
}); 

module.exports = { 
    entry: { 
    main: ['./tests/test-bundler.js'] 
    }, 
    target: 'node', 
    output: { 
    path: path.resolve('./build', project.basePath), 
    filename: 'build/tests.js' 
    }, 
    externals: [nodeExternals()], 
    module: { 
    rules: [    
     { 
     test: /\.js?$/, 
       use: [ 
        { 
         loader: 'babel-loader', 
         options: { 
          cacheDirectory: true, 
          plugins: [ 
           'babel-plugin-transform-class-properties', 
           'babel-plugin-syntax-dynamic-import', 
           [ 
            'babel-plugin-transform-runtime', 
            { 
             helpers: true, 
             polyfill: false, // we polyfill needed features in src/normalize.js 
             regenerator: true 
            }, 
           ], 
           [ 
            'babel-plugin-transform-object-rest-spread', 
            { 
             useBuiltIns: true // we polyfill Object.assign in src/normalize.js 
            }, 
           ], 
          ], 
          presets: [ 
           'babel-preset-react', 
           ['babel-preset-env', { 
            targets: { 
             ie9: true, 
             uglify: true, 
             modules: false 
            } 
           }], 
          ] 
         } 
        } 
       ], 
     exclude: /node_modules/ 
     }, 
     { 
       test: /\.(sass|scss)$/, 
       use: [ 
      'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]__[hash:base64:5]', 
      'sass-loader', 
       ] 
      }, 
      { 
       test: /\.(gif|png|jpe?g|svg)$/i, 
       loaders: [ 
        'file-loader', 
        { 
         loader: 'image-webpack-loader', 
         query: { 
          progressive: true, 
          optipng: { 
           optimizationLevel: 7 
          }, 
          gifsicle: { 
           interlaced: false 
          }, 
          pngquant: { 
           quality: '65-90', 
           speed: 4 
          } 
         } 
        } 
       ] 
      }, 
      { 
       // delays coverage til after tests are run, fixing transpiled source 
       // coverage error 
       enforce: 'post', 
       test: /\.js$/, 
       exclude: /(tests|node_modules|bower_components|build)\//, 
       loader: 'istanbul-instrumenter-loader' 
      } 
    ] 
    }, 
    resolve: { 
    extensions: ['.js', '.jsx'] 
    } 
}; 

Comment puis-je assurer que le point d'entrée build/tests.js n'est pas utilisé dans le calcul de la couverture?

Répondre

0

Je suspecte votre exclude regex ne fonctionne pas comme prévu. Dans quel environnement exécutez-vous votre projet?

Quoi qu'il en soit, puisque vous voulez exécuter la suite de la couverture sur votre dossier src seulement, vous pouvez inverser exclure/inclure la logique et aller avec (souvenez-vous d'exiger nœud de path):

{ 
    enforce: 'post', 
    test: /\.js$/, 
    include: path.resolve(__dirname, 'src'), 
    loader: 'istanbul-instrumenter-loader' 
} 
+0

C'est un bon point au sujet de la ' include' propriété. Cependant, les résultats sont les mêmes. (Cela fonctionne sur OSX.) –