2014-09-22 2 views
1

서비스에서 반환하는 약속의 가치를 테스트하려면 어떻게해야합니까?$q documentation에서 promise 값은 resolve (value)를 사용하여 테스트에서 미리 설정됩니다. 다른 접근법은 AngularJS가 약속을 평가하고 $ scope 값을 바인딩한다는 사실을 이용하여 컨트롤러에서 서비스 로직을 테스트합니다.서비스가 약속 한 값을 반환 함

제 생각에는 이러한 접근 방식 중 어느 것도 실제로 테스트해야하는 곳에서 서비스의 논리를 테스트하지 않습니다. 해결 된 약속 (서비스에서 반환)에 올바른 값이 포함되어 있는지 테스트하려면 어떻게합니까? 여기

예 :

이 서비스를 테스트하기 위해
myApp.service('service', function($q){ 
    var obj = {}; 
    obj.test = function() { 
     var deferred = $q.defer(); 
     deferred.resolve(false); 
     return deferred.promise; 
    } 
    return obj; 
}); 

, 나는 (실제로는 작동하지 않는) 이론에서 다음을 수행 할 : VAR $ q를, 서비스;

beforeEach(function() { 
    module('myModule'); 
    service = $injector.get('service'); 
}); 

describe('...', function() { 
    it('Testing whether promise contains correct value', function() { 
     var myPromise = service.test(); 
     myPromise.then(function(value) { 
      expect(value).toBeFalsy(); 
     }); 
    }); 
}); 

답변

0

나는 잘못된 방식으로 서비스를 주입하고 있다고 생각합니다. 밑줄 표기법을 사용해야합니다. 이 링크를 참조하십시오. http://nathanleclaire.com/blog/2014/04/12/unit-testing-services-in-angularjs-for-fun-and-for-profit/

테스트 결과는 다음과 같습니다.

var service;  
beforeEach(function() { 
    module('myModule'); 
    inject(function(_service_) { 
     service = _service_; 
    }); 
}); 


describe('...', function() { 
    it('Testing whether promise contains correct value', function() { 
     var myPromise = service.test(); 
     myPromise.then(function(value) { 
      expect(value).toBeFalsy(); 
     }); 
    }); 
}); 
+0

약속을 되 돌리면서 (원래 질문에서 변경해야 함) 동의하지만, 여전히 작동하지 않습니다. – bengro

+0

테스트의 다른 부분을 특히 테스트를 설정 한 부분에 게시 할 수 있습니까? –

+0

원래 질문에서 테스트를 업데이트했습니다. – bengro

관련 문제