LoginSignup
28
10

More than 5 years have passed since last update.

Mocha用のテストファイルでESLintエラー'describe' is not defined no-undef

Posted at

はじめに

長いので、興味のない人は TL;DR まで飛ばしてください。

JavaScriptを綺麗な状態で保つためになくてはならない存在のESLintだが、それが素のJavaScriptではなく、mocha用のテストファイルだと話が変わる。
ファイル内で定義していない関数、describeitを使うからだ。
そうなってくると、プログラムがエラーだらけになってくる。
image.png
しかし、これだけのためにテストファイルに対して、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にはプログラム内のコメントでグローバル変数の設定やルールの制御を行うことができます。
ここで、単純にdescribeitなどをグローバル変数として登録しても良いのですが、先程書いた、環境設定のmochaを有効にすれば後から見たときに1ミリぐらい分かりやすくなるだろう。
環境設定を変えるには

/* eslint-env ... */

と書けばいいのでmochaを有効にするには

/* eslint-env mocha */

と書けばいい。

あとがき

日本語の解説がなかったから書いたものの、よく探してみたら公式のドキュメントにそのまま乗ってたりするので記事にするほどでもないなと思ったりと...まぁ1ミリぐらい誰かの役に立てば。終わり。

参考

Configuring ESLint - ESLint - Pluggable JavaScript linter

ESLintのコメントでのルール制御 - Qiita

28
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
10