チャイテストでは、.to.be.empty
、.to.be.true
などのアサーションを使用したいことがよくあります。なぜなら、.to.be.length(1)
や.to.be.equal(true)
。しかし、これは私のリンターを壊します(デフォルトのAirbnbリンティングを使用しています)。
// disable-eslint-line
構文を使用することもできますが、そのように読み取るすべての行にそれを追加する必要があり、それは退屈に思えます。
DirtyChai ライブラリについても読んだことがありますが、テストライブラリ全体に戻ってブラケットを追加する必要がありますが、これは単に取得するために行うべきではないように思えます何かを渡すためにリンターは、そもそも大丈夫でしょう。
これを上で説明した方法よりもうまく処理する方法を知っている人はいますか?
問題のファイルの上部で eslint-disable
を使用して、ファイル全体のルールを無効にできます。
/* eslint-disable no-unused-expressions */
expect(someTrueValue).to.be.true;
ただし、これをすべてのテストファイルの先頭に追加するのは面倒です。関連するすべてのファイルでこのルールを無効にするには、次のことができます。
新しい.eslintc
構成ファイル をテストファイルと同じディレクトリに配置し、そのルールを無効にするように構成します。これにより、他のすべてのルールにデフォルト構成を使用しながら、そのフォルダー内のファイルでのみそのルールを明確に無視できます。 ESLintはこれを Configuration Cascading
と呼びます。
{
"rules": {
"no-unused-expressions": "off"
}
}
メインの.eslintrc
ファイルでoverrides
キーを使用して、 ファイルグループのルールを無効にします globパターンマッチングを使用します。
{
"overrides": [
{
"files": ["*.test.js", "*.spec.js"],
"rules": {
"no-unused-expressions": "off"
}
}
]
}
これにより、 rewire
を使用する場合のno-underscore-dangle
など、テストで面倒になる他のルールを無効にすることもできます。
Relative Glob Patterns を使用した別のオプションが見つかりました:
あなたの.eslintrc
ファイル:
overrides: [
{
files: "*.test.js",
rules: {
"no-unused-expressions": "off"
}
}
]
デフォルトのeslint-plugin-chai-friendly
ルールをオーバーライドし、chaiに優しいようにするno-unused-expressions
という小さな plugin を作成しました。変更されたルールは、expect
およびshould
ステートメントを無視し、他のすべてのデフォルトの動作を維持します。
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
ルールが引き続き配置されます。
今日誰かがこれにつまずいた場合、私は同じ問題を抱えていて、この解決策を eslint documentation で見つけました。 eslint構成ファイルで、1つまたは複数の環境を指定できます。これにより、この環境のグローバル変数が事前定義されます。私たちにとっては、それはmocha
であり、あなたは.eslintrc.json
:
{
"env": {
"mocha": true
},
...
...
...
}
その結果、eslintを完全に無効にしたり、特定のルールを完全に無効にしたりすることなく、mocha describe
、it
、beforeEach
などに関する誤検知がすべて削除されます。
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/
の下のファイルにのみ適用されます。