はらへり日記

腹に弾丸

espower-typescriptでローカルの.d.tsファイルを読み込ませる方法

最近、仕事でTypeScriptに入門中ひよっこです。

ユニットテストをmocha + power-assert + TypeScriptで書く際、espower-typescriptを導入したのだけど、その際にハマったのでメモ。

前提

  • TypeScript 3.0.1
  • power-assert 1.6.0
  • espower-typescript 9.0.0

起きたこと

mochaでテストを実行するとローカルの型定義ファイル(.d.ts)を読み込まず、エラーになった。

エラーメッセージ

https://i.gyazo.com/9671d41744f80e39fddf8dbdcfd1a1fe.png

原因

いろいろ調べるとespower-typescriptが依存しているts-nodeが原因っぽい。

このts-nodeのversionsが7.0.0からデフォルトの挙動でローカルのtsconfig.jsonの読み込みをスキップするようになった。

github.com

github.com

これを有効にするにはCLI実行時であれば--filesオプションを渡すだけなのだが、espower-typescriptにラップされてる上にコードを読んだ感じoptionで渡す方法も無いのでPRを出してoptionを渡せる or --filesオプションが有効になるよう書き換えるしかない。

解決策

と、面倒だなぁと悶々としていたら環境変数を指定することでオプション指定ができることに気づいた。

github.com

--files Load files from tsconfig.json on startup (TS_NODE_FILES, default: false)

なので以下のようにコマンド実行すればespower-typescript内部のts-nodeの--filesオプションが有効になった状態でテストを実行できる。

TS_NODE_FILES=true mocha -r espower-typescript/guess src/**/*.test.ts

後半のコマンドはよしなに、大事なのはTS_NODE_FILES=trueをつけることです。

そもそもTypeScriptでユニットテスト書くときのデファクトわからないしハマること多いけど引き続き頑張ります。