2017-09-22 12 views
1

私は、テスト時にいくつかの値をオーバーライドしたいと思います。具体的には、httpサービスの再試行回数を1(即時の失敗、再試行なし)に設定します。私たちのプロジェクトはnode-configを使用しています。 docsによると、私はNODE_CONFIGのenv変数をオーバーライドすることができます。実行時にnode-configで設定値を上書きするにはどうしたらいいですか?

node myapp.js --NODE_CONFIG='{"Customer":{"dbConfig":{"host":"customerdb.prod"}}}' 

まあ、私は私のテストではなく、すべてのテストのためにこれを行うことを好むだろう。 codeは、ALLOW_CONFIG_MUTATIONSを設定することでconfigの変異を許可できると言います。

process.env.ALLOW_CONFIG_MUTATIONS = "true"; 
const importFresh = require('import-fresh'); 
importFresh("config"); 

process.env.NODE_CONFIG = JSON.stringify({httpServices:{integration:{enrich: {retryInterval: 1, retries: 1}}}}); 
expect(process.env.NODE_CONFIG, 'NODE_CONFIG not set').to.exist(); 
expect(process.env.NODE_CONFIG, 'NODE_CONFIG not set').to.match(/retryInterval/); 
expect(process.env.ALLOW_CONFIG_MUTATIONS, 'ALLOW_CONFIG_MUTATIONS not set').to.equal("true"); 

const testConfig = require("config"); 
console.dir(testConfig.get("httpServices.integration.enrich")); 
expect(testConfig.get("httpServices.integration.enrich.retryInterval"), 'config value not set to 1').to.equal(1); 

結果:

{ url: 'https://internal-**********', 
    retryInterval: 5000, 
    retries: 5 } 
`Error: config value not set to 1: Expected 5000 to equal specified value: 1` 

が、私はこのオーバーライドは、仕事を得るにはどうすればよいですか?

(期待Hapi.jsコードライブラリからである)

答えて

2

私はnode-configのメンテナーの一人です。お使いのバグはimportFreshをもう一度使用する必要があったときに、requireを2度使用したことです。

require()の最初の使用であるため、 "importFresh()"の最初の使用はrequire()と何も変わりません。

いくつかの変数を設定した後、require()を呼び出します。configのコピーがすでに生成され、キャッシュされ、環境変数の設定の影響は無視されます。

require()を使用している場合は、importFresh()を1回だけ使用する必要があります。これにより、期待どおりに設定オブジェクトの「新鮮な」コピーが返されます。

+0

それはうまくいった。私は今、それを見た後、なぜかを見る。あなたの答えはもう少しの説明を使用することができます。 – jcollum

+0

答えがより詳細に更新されました。 –

0

それはあなたのconfigフォルダノード-config設定はそれをアプリの設定を使用するにproduction.jsonらtest.json、development.jsonを作成する方が良いでしょう。 特定のファイルを使用するようにNODE_ENVを設定するだけです。 希望します。

+0

私はすべてのテストではなく、特定のテストで自分の設定を変更できるようにしたい。私が言及したように:「まあ、私は私のテストでこれをやりたいですが、すべてのテストではしません。 – jcollum

+0

@jcollumわかりました。あなたは 'export"のような設定をエクスポートしようとしましたか?{"Customer":{"dbConfig":{"host": "customerdb.prod"}}} '' –

+0

私のソースコードを読んでいますか?あなたの質問に答えているようです。 – jcollum

関連する問題