忽略打字稿装饰器的覆盖范围

alb*_*ert 5 typescript istanbul karma-webpack

我正在使用 Typescript 创建一些带有 Lit 元素的 Web 组件。使用 karma 捆绑和单元测试的 Webpack。

我注意到覆盖率报告已经全部出来了:

  • 在装饰器上显示未覆盖的分支和语句
  • 错误地报告了装饰器后面的行的覆盖率

我试过/* istanbul ignore next */在装饰器之前添加,但是 tsc 删除了它。

关于如何更新配置以防止装饰器被包含在覆盖率报告中的任何想法?

来源:

import {customElement, html, LitElement, property} from "lit-element";
import Style from "./style.less";

@customElement("webcom-voorbeeld")
export class WebcomVoorbeeld extends LitElement {

    @property({type: String, attribute: "attribute"})
    attribute = "default";

    @property({type: Number})
    property = 0;

    static get styles() {
        return [Style];
    }

    constructor() {
        super();
    }

    render() {
        return html
            `<div class="webcom webcom-voorbeeld">
                <p class="heading font-bold webcom-clr-blue-02">New Voor-Beeld component</p>
                <div class="slot copy"><slot></slot></div>
                <button class="webcom-cta-btn" @click="${this.handleClick}">${this.attribute}</button>
            </div>`;
    }

    private handleClick() {
        this.property++;

        const event = new CustomEvent("webcom-event-name", {
            detail: {
                message: {
                    clicked: this.property,
                },
            },
            bubbles: true,
        });
        this.dispatchEvent(event);
    }
}
Run Code Online (Sandbox Code Playgroud)

网络包配置

const {CleanWebpackPlugin} = require('clean-webpack-plugin');

module.exports = {
    context: __dirname,
    entry: './src/webcom-voorbeeld.ts',
    output: {
        filename: 'webcom-voorbeeld.js',
    },
    devtool: 'inline-source-map',
    mode: 'development',
    watchOptions: {
        ignored: [
            'node_modules/**',
            'test/**'
        ]
    },
    module: {
        rules: [
            {
                test: /\.ts$/,
                exclude: /node_modules/,
                use: 'ts-loader'
            },
            {
                test: /\.ts$/,
                exclude: /(node_modules|\.spec\.ts$|test-utils.ts$)/,
                loader: 'istanbul-instrumenter-loader',
                enforce: 'post',
                options: {
                    esModules: true
                }
            },
            {
                test: /\.woff2$/,
                loader: 'url-loader'
            },
            {
                test: /\.(woff|eot|ttf)$/,
                loader: 'file-loader'
            },
            {
                test: /\.(svg|png|jpg|gif)$/i,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192,
                        },
                    },
                ],
            },
            {
                test: /\.less|\.css$/,
                use: [
                    {
                        loader: 'lit-scss-loader',
                        options: {
                            minify: false, 
                        },
                    },
                    'extract-loader',
                    {
                        loader: 'css-loader',
                    },
                    {
                        loader: 'less-loader',
                        options: {
                            lessOptions: {
                                strictMath: true,
                                noIeCompat: true,
                            }
                        }
                    },
                    'postcss-loader'
                ],
            },
        ],
    },
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
    },
    optimization: {
        minimize: false
    },
    plugins: [
        new CleanWebpackPlugin()
    ],
    stats: {
        colors: true,
        hash: false,
        version: true,
        timings: true,
        assets: false,
        chunks: false,
        modules: false,
        reasons: true,
        children: false,
        source: false,
        errors: true,
        errorDetails: true,
        warnings: true,
        publicPath: false,
    },
    bail: true
};
Run Code Online (Sandbox Code Playgroud)

覆盖率报告: 覆盖率报告