2015-01-02 3 views
2

인터넷에서 토론을 읽었습니다. 그들은 구현 세부 사항과 나쁜 설계의 징후이기 때문에 우리는 개인적인 방법을 테스트하거나 개인 상태를 검사해서는 안된다고 말합니다. 하지만 제 경우에는 더 잘하는 법을 모릅니다.단위 테스트에서 개인 상태를 확인하는 방법은 무엇입니까?

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에는 제거 할 수없는 자체 논리가 있기 때문에 통합 테스트와 비슷합니다.

+0

는 내가 제대로 질문을 이해를 바란다,하지만 난 당신이 설정되는 state.property1 및 state.property2에 대해 걱정하는 경우, 당신이 그 속성 1과 property2 인수가 유효 테스트해야합니다 것을 제안하고 에러/예외를 슬로우 그렇지 않다면. 그런 다음 단위 테스트를 사용하여 리터럴 값을 확인하지 않고 예외가 발생했는지 모니터링 할 수 있습니다. – rpaskett

+0

@rpaskett : 이러한 속성에 대한 확인은 없으며 모든 값을 가진 문자열입니다. –

+0

맞아, 만약 당신이'if (typeof property1! == "string") {throw new Error()}'와 같이하면 state.property1에 유효한 값이 할당되도록 할 것입니다. (유닛 테스트 프레임 워크가 실제로 발생 된 오류를 모니터 할 수 있다고 가정 할 때) 유닛 테스트가이를 점검 할 수 있습니다. – rpaskett

답변

0

스파이가 localStorage mock에 있고 일부 매개 변수와 함께 호출되었다고 주장합니다. 그렇지 않으면 refreshState이 해당 작업을 수행하고 getState이 해당 작업을 수행한다는 두 가지 테스트가 수행됩니다.

describe('closure', function() { 
    it('#refreshState', function() { 
    var localStorageSpy = jasmine.createSpyObj('window.localStorage', ['setItem',]); 

    var closure = closure(); 
    closure.refreshState('params', 'params2'); 
    expect(localStorageSpy.getItem).toHaveBeenCalledWith('params', 'whatevs'); 

    }); 
}); 
+0

localStorage를 조롱 할 것입니다. (그게 내가하고있는 일입니다.) refreshState에서 두 가지를 테스트하고 싶습니다. 메모리의 상태가 업데이트되고 상태가 localstorage에 저장됩니다 (로컬 저장소를 조롱하여 테스트 할 수 있음)하지만 메모리의 상태가 업데이트되었는지 테스트 할 수 없습니다. –

+0

메모리 상태가 최신인지 확인하려면 추가 검사를 추가하고 테스트 할 수있는 예외 처리를 구현해야합니다. 테스트 할 대상이 너무 구체적이어서 의존해서는 안됩니다. 실제 가치가 아니라 오히려 방법의 흐름. –

관련 문제