config.ts
ノードで実行されるTypeScript ファイルがあります。
import myDependency = require('my-dependency');
export = {
doSomething = () => {
...
}
}
他の TypeScript ファイルでは、import
このファイルを完全なタイプ セーフで実行できます。
import config = require('./config');
config.doSomething();
config.doSomethingElse(); // compiler error, this method doesn't exist
ここで、このスクリプトの単体テストを行います。このスクリプトrequire()
の依存関係を模倣するために、私はproxyquireを使用しています。これにより、スクリプトが を呼び出すときに取得する値を提供できますrequire()
。私のテストは次のようになります。
import proxyquire = require('proxyquire');
const config = proxyquire('./config', {
'my-dependency': {} // this mocked object will be provided when config.ts asks for `my-dependency`
});
expect(config.doSomething()).to.do.something();
の代わりに使用しているため、config
変数の型が. TypeScript は、モジュール解決を実行できるように、関数に特別な処理を与える必要があります。のように、モジュールの解決も行う必要がある TypeScript コンパイラに指示する方法はありますか?any
proxyquire()
require()
require()
proxyquire()
require()
クラスとして書き直すconfig.ts
か、インターフェースを使用することができます。次に、クラス/インターフェイス定義をインポートすることにより、テストで変数を明示的に入力できます。しかし、proxyquire()
暗黙的に入力できるようにすることは、はるかに簡単な解決策です。