리소스에 대한 래퍼 인 서비스를 호출하는 컨트롤러가 있습니다. 이와 같이 :리소스를 기반으로하는 서비스에 종속 된 컨트롤러 테스트
서비스 메서드의 반환 값은 컨트롤러 내의 변수에 할당됩니다. 일반적으로 변수는 Resource
이고 promise
을 포함합니다. 약속이 해결되면 변수에 백엔드에서 반환 된 모든 값이 채워집니다. 나는 백엔드에서받은 모델을 수정하기 위해 약속에서을 추적합니다. 그래서 같이 :
this.model = Service.get();
this.model.$promise.then(function(data) {
// do something with data
});
내 컨트롤러 결과 모델 변수의 값을 테스트해야합니다. 이 작업을 수행하는 유일한 방법은 $ httpBackend을 내 서비스의 실제 구현과 함께 사용하는 것입니다. 그러나 내 컨트롤러를 테스트하기 때문에 어떤 값으로 응답하기 위해서는 에 응답 경로 "api/Service/get"
을 httpBackend.when()에 전달해야하기 때문에 이것은 추한 것입니다.
발췌 내 테스트를 형성 :
// call Controller
$httpBackend.when('GET', '/api/Service/get').respond(someData);
$httpBackend.flush();
expect(scope.model.property).toBe(null);
이 보인다 완전히 잘못 느낀다. 리소스를 다루기 위해 별도의 서비스를 사용하는 요지는 컨트롤러가 URL과 http 메서드 이름에 대해 알지 못하는 것입니다. 그래서 내가 무엇을해야하니?
다른 말로하면, 내가 테스트하고 싶은 것은 then
이 호출되고 내가 필요한 것을 수행한다는 것입니다.
아마도 then
에서 호출되는 별도의 서비스를 만들 수 있습니다. 모델에서해야 할 일을 수행합니다. 예를 들어, 하나의 필드를 null로 설정하고 싶은 경우에는 약간의 잔인 함이 느껴집니다. 간단한 조건에 따라.
당신을 위해이 일을 했 ? – tasseKATT