2017-09-22 3 views
1

테스트 시간에 일부 값을 무시하고 싶습니다. 특히 HTTP 서비스에 대한 재시도 횟수를 1 (즉시 실패, 재 시도 없음)로 설정하고 싶습니다. 우리 프로젝트는 node-config을 사용합니다. docs에 따르면 나는 NODE_CONFIG ENV 변수로 대체 할 수 있습니다 :런타임시 node-config로 구성 값을 대체하려면 어떻게합니까?

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

그럼 난 내 테스트에서이 작업을 수행하는 것을 선호하지만, 모든 시험. codeALLOW_CONFIG_MUTATIONS을 설정하여 구성 변이를 허용 할 수 있다고 말합니다.

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` 

어떻게이 재정의 작업합니까?

그것은이 앱 구성을 사용하여 config 폴더의 노드 설정에 development.json, production.json 등 test.json를 작성하는 것이 좋습니다

답변

2

저는 node-config의 관리자 중 한 사람입니다. 귀하의 버그는 importFresh을 다시 사용했을 때 두 번째로 require을 사용한 것입니다.

첫 번째로 사용하는 require()이기 때문에 "importFresh()"를 처음 사용하면 require()과 아무런 차이가 없습니다.

일부 변수를 설정 한 후에는 require()을 호출하면 config 복사본이 이미 생성되고 캐시되며 환경 변수 설정의 영향은 무시됩니다.

을 사용하는 경우에만 importFresh() 번만 사용하면됩니다. 이로 인해 예상대로 구성 개체의 "최신"복사본이 반환됩니다.

+0

그게 효과가 있어요. 나는 지금 그것을보고 나서 왜 있는지 보았다. 귀하의 대답은 좀 더 많은 설명을 사용할 수 있습니다. – jcollum

+0

답변이 더 자세하게 업데이트되었습니다. –

0

(기대는 Hapi.js 코드 라이브러리입니다). 특정 파일을 사용하도록 NODE_ENV를 설정하면됩니다. 희망이 있습니다.

+0

아닙니다. 모든 테스트가 아닌 특정 테스트에서 구성을 변경할 수 있기를 원합니다. 내가 언급했듯이 : "글쎄, 나는 내 테스트에서 이것을하는 것이 좋지만 모든 테스트에서는 그렇지 않다." – jcollum

+0

@jcollum 알겠습니다. 'export NODE_CONFIG ='{ "Customer": { "dbConfig": { "host": "customerdb.prod"}}} ''' –

+0

와 같은 설정을 내보내려고 했습니까? 내 소스 코드를 읽었습니까? 귀하의 질문에 대답하는 것 같습니다. – jcollum