web-dev-qa-db-ja.com

chaiでno-unused-expressions linterエラーを取り除く素敵な方法

チャイテストでは、.to.be.empty.to.be.trueなどのアサーションを使用したいことがよくあります。なぜなら、.to.be.length(1).to.be.equal(true)。しかし、これは私のリンターを壊します(デフォルトのAirbnbリンティングを使用しています)。

// disable-eslint-line構文を使用することもできますが、そのように読み取るすべての行にそれを追加する必要があり、それは退屈に思えます。

DirtyChai ライブラリについても読んだことがありますが、テストライブラリ全体に戻ってブラケットを追加する必要がありますが、これは単に取得するために行うべきではないように思えます何かを渡すためにリンターは、そもそも大丈夫でしょう。

これを上で説明した方法よりもうまく処理する方法を知っている人はいますか?

40
Ben Hare

問題のファイルの上部で eslint-disable を使用して、ファイル全体のルールを無効にできます。

/* eslint-disable no-unused-expressions */
expect(someTrueValue).to.be.true; 

ただし、これをすべてのテストファイルの先頭に追加するのは面倒です。関連するすべてのファイルでこのルールを無効にするには、次のことができます。

  1. 新しい.eslintc構成ファイル をテストファイルと同じディレクトリに配置し、そのルールを無効にするように構成します。これにより、他のすべてのルールにデフォルト構成を使用しながら、そのフォルダー内のファイルでのみそのルールを明確に無視できます。 ESLintはこれを Configuration Cascading と呼びます。

    {
        "rules": {
            "no-unused-expressions": "off"
        }
    }
    
  2. メインの.eslintrcファイルでoverridesキーを使用して、 ファイルグループのルールを無効にします globパターンマッチングを使用します。

    {
        "overrides": [
            {
                "files": ["*.test.js", "*.spec.js"],
                "rules": {
                    "no-unused-expressions": "off"
                }
            }
        ]
    }
    

これにより、 rewire を使用する場合のno-underscore-dangleなど、テストで面倒になる他のルールを無効にすることもできます。

39
Nick Bartlett

Relative Glob Patterns を使用した別のオプションが見つかりました:

あなたの.eslintrcファイル:

overrides: [
    {
        files: "*.test.js",
        rules: {
            "no-unused-expressions": "off"
        }
    }
]
26
jonalvarezz

デフォルトのeslint-plugin-chai-friendlyルールをオーバーライドし、chaiに優しいようにするno-unused-expressionsという小さな plugin を作成しました。変更されたルールは、expectおよびshouldステートメントを無視し、他のすべてのデフォルトの動作を維持します。

16
Ihor Diachenko

jonalvarezzの答えIhor Diachenkoの答え を組み合わせることで、私が望んでいたものを正確に得ることができました。

npm install --save-dev eslint-plugin-chai-friendly

// .eslintrc.js
module.exports = {
  // ...
  plugins: ['chai-friendly'],
  overrides: [{
    files: '*.test.js',
    rules: {
      'no-unused-expressions': 'off',
      'chai-friendly/no-unused-expressions': 'error',
    },
  }],
  // ...
}

このように、no-unused-expressionルールは*.test.jsファイルでのみオーバーライドされ、chaiとは関係のないテストファイル内の未使用の式をキャッチするためにno-unused-expressionルールが引き続き配置されます。

4
Scott Rudiger

今日誰かがこれにつまずいた場合、私は同じ問題を抱えていて、この解決策を eslint documentation で見つけました。 eslint構成ファイルで、1つまたは複数の環境を指定できます。これにより、この環境のグローバル変数が事前定義されます。私たちにとっては、それはmochaであり、あなたは.eslintrc.json

{
    "env": {
        "mocha": true
    },
    ...
    ...
    ...
}

その結果、eslintを完全に無効にしたり、特定のルールを完全に無効にしたりすることなく、mocha describeitbeforeEachなどに関する誤検知がすべて削除されます。

ESLint v.4.11およびmocha 5.0でテスト済み

Tslintでこの問題が発生し、未使用の式のルールを1レベル下に移動するだけで解決しました。私の./tslint.jsonは私が気にする他のすべてのルールを持っているので、次のような./src/tslint.jsonを作成しました

{
    "rules": {
        "no-unused-expression": true
    },
    "extends": "../tslint.json"
}

tslintは、ツリーを下るときに(--projectまたはVSCode拡張機能を使用して)すべてのレベルで構成ファイルを自動的にチェックするため、テスト(./test/の下)には他のすべてのルールが適用されますが、 no-unused-expressionは、./src/の下のファイルにのみ適用されます。

0
Coderer