`node --inspect --debug-brk`を使ってE2Eテストをデバッグするのめちゃ便利

当エントリは、[Schoo Advent Calendar 2016](http://qiita.com/advent-calendar/2016/schoo)の9日目として書かれています。

@takoba と申します。Schooのエンジニア兼カレー王子を担当しております。

主にフロントエンドを主戦場としてますが、バックエンドも普通に書いてます。
むしろ最近は比重多めになってきてるので、ぼくを自由にしてくれるバックエンド得意なアプリケーションエンジニアの方絶賛募集中です！！！

---

そんな中でフロントエンドエンジニアとしての矜持を保つために、今回はE2Eテストのデバッグに便利なツールをご紹介します。


# node-inspectorの時代は終わった...？

先日Schooで取り扱っている某リポジトリで利用していたNode.jsのバージョンを大幅にアップグレードしたときのお話です。

Node.jsのデバッグに多大なる貢献をしてくれる[node-inspector](https://www.npmjs.com/package/node-inspector)ですが、そのアップグレードをした環境でうまく動かなくなってしまいました。

「むむむ...？」と思って代替手段を調べてみると、[`node --inspect`というコマンド](https://nodejs.org/dist/latest-v6.x/docs/api/debugger.html#debugger_v8_inspector_integration_for_node_js)がよさそうだったので利用してみることにしました。


# v6.3.0からv8-inspectorがお試しで追加されてる

[`nodejs/node`のCHANGELOG](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V6.md#2016-07-06-version-630-current-fishrock123)を見ると、v6.3.0から"Experimental support"という扱いでv8-inspectorという機能が導入されたようです。

![f52fefede85e99b4ed0468b7f2023de8.png](https://qiita-image-store.s3.amazonaws.com/0/9856/7efbe794-9afa-8c1e-8940-f0d1bb0a628b.png "f52fefede85e99b4ed0468b7f2023de8.png")

> it could be altered or removed.

とか物騒なこと書いてありますが、[v6は2016/12現在でLTS](https://github.com/nodejs/LTS)って言ってるしカジュアルに使ってみます。


# 詳しい使い方

## 0. インストール

Node.js v6.3.0以上であれば、何かパッケージを導入する必要はありません！プリセットでこんな機能があるの素敵！！！
ちなみに以下で検証しているのはこんなかんじのバージョンです。

```bash
node -v
#=> v6.9.1
```

...とはいえ、別途以下は必要になってきます。

- E2Eテストを実行する環境
	- ちなみに弊社では[testiumjs](http://testiumjs.com/)+[mocha](https://mochajs.org/)で主に実現してます
	- タスクランナーである[gulp.js](http://gulpjs.com/)を用いて実行させてます
- Google Chrome
	- 特にバージョンは問いませんが最新のものがよいです

## 1. `node --inspect --debug-brk` でE2Eテストを実行する

たったこれだけです。めちゃ簡単。
今回取り扱った環境では`gulp test:e2e`でE2Eテストが実行されるようにしておいたので、gulpfile.jsが配置されているディレクトリで

`node --inspect --debug-brk -e "require('./gulpfile'); require('gulp').start('test:e2e');"`

を実行するだけ。すると、以下のように動いてくれます。

![40fe8ff3bcf5a024a86f4c09cbacdf1e.gif](https://qiita-image-store.s3.amazonaws.com/0/9856/652c0a94-9b8b-65b2-e087-72e1a12c1145.gif "40fe8ff3bcf5a024a86f4c09cbacdf1e.gif")


ちなみに、`--debug-brk`を付与するとinspectorとして扱うデベロッパーツールのURLをリクエストするまで、指定した処理の実行を待ってくれます。

![88f1fb625c4bd5d4c7ccc54d3615105d.gif](https://qiita-image-store.s3.amazonaws.com/0/9856/95b4cf17-da39-5af6-f130-e00570782d98.gif "88f1fb625c4bd5d4c7ccc54d3615105d.gif")

## 2. breakpointを設定して、お手軽デバッグ

![06c88494a287fc36c8ddbb6ccef94734.gif](https://qiita-image-store.s3.amazonaws.com/0/9856/4cd577e7-9d10-b9d0-a76d-2fae8171b3a0.gif "06c88494a287fc36c8ddbb6ccef94734.gif")


テストコードにbreakpointを設定して、変数に格納された値も簡単に確認できます。デバッグめっちゃ捗る。


# おわりに

普段からChromeデベロッパーツールを使い慣れてる方にはオススメです。是非お試しあれ！

こんなかんじで一緒にフロントエンド周辺技術を便利に使い倒していきたい方々にオススメのリンク集を置いておきますね:eyes:

- [教育×ITで世の中を変えるスクーが、開発リードエンジニアを募集 \- Wantedly](https://www.wantedly.com/projects/47833)
- [新たな「学び」を創造したい開発エンジニアを募集 \- Wantedly](https://www.wantedly.com/projects/49282)
- [［動画×教育］新たな学習体験を開発するエンジニアをウォンテッド！ \- Wantedly](https://www.wantedly.com/projects/67488)
- [スクラムマスターとして開発を円滑に進めるテクニカルディレクターを募集 \- Wantedly](https://www.wantedly.com/projects/72407)
- [5周年でCIも一新！Schooの全てのデザインを担う デザイナー募集 \- Wantedly](https://www.wantedly.com/projects/70697)

それではまた！明日は弊社が誇る芸術家の @stakeshita からお送りします:art:

# 参考

- [Debugger \| Node\.js v6\.9\.2 Documentation](https://nodejs.org/dist/latest-v6.x/docs/api/debugger.html)
	- v8-inspectorについては[こちら](https://nodejs.org/dist/latest-v6.x/docs/api/debugger.html#debugger_v8_inspector_integration_for_node_js)
- [node\-inspectorなしでNode\.jsをデバッグする \- Qiita](http://qiita.com/y_fujieda/items/c190cbcc2fab6dd49809)
	- 実際に導入する際に参考にさせていただきました:bow: