はじめに
長いので、興味のない人は TL;DR まで飛ばしてください。
JavaScriptを綺麗な状態で保つためになくてはならない存在のESLintだが、それが素のJavaScriptではなく、mocha用のテストファイルだと話が変わる。
ファイル内で定義していない関数、describe
やit
を使うからだ。
そうなってくると、プログラムがエラーだらけになってくる。
しかし、これだけのためにテストファイルに対して、ESLintを無効にするのももったいないので、何か回避する方法が無いのか調べてみてもルール単位、ここではno-undef
を無効にする方法しか日本語の解説が見つからなかったので、同じ様な事態になった人の助けになればとこの記事を書く。
TL;DR
ソースコードの一行目に
/* eslint-env mocha */
と書く。それだけ。
一行目じゃなくても、mocha関連の関数が出てくる前に書けば無効になるが一行目に書いたほうがスッキリしていいだろう(多分)
ただ、//
から始まるコメントだと機能しない
Specifying Environments
実は、デフォルトでESLintの全てのテスト変数をグローバル変数に設定してくれる環境設定、mocha
があって、JSONなら
{
"env": {
"mocha": true
}
}
のように書けばいいのですが、そうすると全てのファイル、テストファイル以外のファイルまで、mochaのテスト変数がグローバル変数として扱われるので、万が一、describe
とかit
を定義していなくても、no-undef
に反応していのです。これを解決するために次に書く方法を使用します。
Specifying Globals
ESLintにはプログラム内のコメントでグローバル変数の設定やルールの制御を行うことができます。
ここで、単純にdescribe
やit
などをグローバル変数として登録しても良いのですが、先程書いた、環境設定のmocha
を有効にすれば後から見たときに1ミリぐらい分かりやすくなるだろう。
環境設定を変えるには
/* eslint-env ... */
と書けばいいのでmocha
を有効にするには
/* eslint-env mocha */
と書けばいい。
あとがき
日本語の解説がなかったから書いたものの、よく探してみたら公式のドキュメントにそのまま乗ってたりするので記事にするほどでもないなと思ったりと...まぁ1ミリぐらい誰かの役に立てば。終わり。