私はノードで実行されますtypescriptファイルconfig.ts
ありますTypeScriptでrequire()の代わりにカスタムモジュール解決関数( "proxyquire"など)を使用できますか?
import config = require('./config');
config.doSomething();
config.doSomethingElse(); // compiler error, this method doesn't exist
今、私はユニットテストしたい:私は完全な型の安全性とimport
このファイルすることができ、他のtypescriptファイルで
import myDependency = require('my-dependency');
export = {
doSomething =() => {
...
}
}
をこのスクリプト。このスクリプトの依存関係を模擬するために、require()
を呼び出したときにスクリプトが取得する値を提供するためにproxyquireを使用しています。これは私がrequire()
の代わりにproxyquire()
を使用していますので、私のconfig
変数の型any
であることを除いて、正常に動作します
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();
:ここでは私のテストはどのように見えるかです。 TypeScriptは、モジュール解決を実行できるように、require()
関数に特別な処理を与える必要があります。 TypeScriptコンパイラにproxyquire()
も同様にモジュール解決を行うべきであることを伝える方法はありますか?require()
に似ていますか?
config.ts
をクラスとして書き換えたり、インターフェイスを使用したりすることができます。次に、クラス/インタフェースの定義をインポートして、テストで明示的に変数をタイプすることができます。しかし、proxyquire()
を暗黙のうちに入力することは、もっと簡単な解決策になります。