인터넷에서 토론을 읽었습니다. 그들은 구현 세부 사항과 나쁜 설계의 징후이기 때문에 우리는 개인적인 방법을 테스트하거나 개인 상태를 검사해서는 안된다고 말합니다. 하지만 제 경우에는 더 잘하는 법을 모릅니다.단위 테스트에서 개인 상태를 확인하는 방법은 무엇입니까?
function closure(){
var state = {};
return {
refreshState : function(property1,property2) {
state.property1 = property1;
state.property2 = property2;
//store these properties into localstorage
},
getState: function() {
if (!state.property1) {
state.property1 = //retrieve from localstorage
}
if (!state.property2) {
state.property2 = //retrieve from localstorage
}
return state;
}
};
};
var objectToTest = closure();
: 여기
는 (내 실제 코드 공장을 사용하여 각도,하지만 난 모든 사람이 쉽게되도록 같은 원인은 폐쇄이기 때문에 이해하기 위해 일반 JS를 사용하여 같은 사건을 만들려고) 예제 코드
제 실제 앱에서는 로컬 저장소를 삽입하고 조롱 할 수 있지만 여기에는 질문이 있습니다. 내 문제는 내가 그 가치 확인할 수 없기 때문에 refreshState
방법은 개인 상태를 설정하는지 테스트하는 방법이다 : 나는 로컬 스토리지 스텁 및 상태를 얻기 위해 getState
방법을 사용에 대해 생각하고
state.property1 = property1;
state.property2 = property2;
합니다. 하지만 getState
에는 제거 할 수없는 자체 논리가 있기 때문에 통합 테스트와 비슷합니다.
는 내가 제대로 질문을 이해를 바란다,하지만 난 당신이 설정되는 state.property1 및 state.property2에 대해 걱정하는 경우, 당신이 그 속성 1과 property2 인수가 유효 테스트해야합니다 것을 제안하고 에러/예외를 슬로우 그렇지 않다면. 그런 다음 단위 테스트를 사용하여 리터럴 값을 확인하지 않고 예외가 발생했는지 모니터링 할 수 있습니다. – rpaskett
@rpaskett : 이러한 속성에 대한 확인은 없으며 모든 값을 가진 문자열입니다. –
맞아, 만약 당신이'if (typeof property1! == "string") {throw new Error()}'와 같이하면 state.property1에 유효한 값이 할당되도록 할 것입니다. (유닛 테스트 프레임 워크가 실제로 발생 된 오류를 모니터 할 수 있다고 가정 할 때) 유닛 테스트가이를 점검 할 수 있습니다. – rpaskett