2017-01-10 5 views
0

좋아, 여기 내 문제입니다 :테스트를 위해 JSON 내의 특정 필드를 삭제 한 다음 삭제를 캐싱하지 않고 다른 테스트에서 JSON을 다시로드하는 방법은 무엇입니까?

it('should fail when Sns is not found within record', (done) => { 
const policy = require('../main/nacl-002-handler.js'); 
const eventData = require('./data/event.json'); 
delete eventData.Records[0].Sns; 

policy.handler(eventData, {}, (err, data) => { 
    err.should.equal(`No Sns field was found within ${eventData.Records[0]}`); 
    should.not.exist(data); 
    done(); 
}); 
}); 

내가 여기에 테스트를 위해 특정 필드를 제거하려면,이 잘 작동합니다. 그러나 다음 테스트에서 동일한 모듈을 다시로드하려고하면 문제가 발생합니다. eventData가 다시로드되면 이전 테스트에서 삭제 한 필드가 누락됩니다. 이것은 Node가 모듈을 캐시하는 방법 때문이라고 생각하지만 이후의 각 테스트에서 데이터를 완전히 다시로드하는 방법을 원합니다. 그래서이 경우 모든 후속 테스트에서 조작 할 때 eventData.Records [0]의 Sns 필드를 그대로 사용하고 싶습니다.

나는 후속 테스트에서 데이터를 "다시 요구했지만"Sns 필드는 여전히 누락되었거나 삭제되었습니다. 당신은 항상 사용할 수있는 깨끗한 사본 그래서

답변

1

당신은이 장전 후 즉시 eventData 개체를 복제 할 수 있습니다 : 당신이 새로운 깨끗한 사본이 필요 할 때마다 다음

var eventDataCLEAN = JSON.parse(JSON.stringify(eventData)); 

을, 단지 이렇게 :

eventData = eventDataCLEAN; 
+0

은 근무 매력처럼. 솔직히 조금 화가 나 그 패턴을 간과했다. 쿨 박사입니다. –