2014-11-18 4 views
2

내 스택 : Angular.js, Karma, Karma-coverage (Istanbul) 및 Jasmine.각도 코드 적용 범위가 잘못되었습니다.

내가, 내 응용 프로그램 문제, 따라서 질문을 통해 코드 커버리지 분석을 실행 한 것은 내가 얻을 입니다 서비스 및 A (녹색) 실제로 어떤 시험이없는 경우 시험에 의해 덮여로 표시 연결된. 내가 서비스 및 A컨트롤러 B에 의해 사용되는 것을 알고

  • :

    나는 다음과 같은 시나리오를 비난하는 것이라고 생각한다.

  • 컨트롤러 B은 테스트의 적용을받으며 코드 적용 결과는 테스트에서 올바르게 표시됩니다.
  • 컨트롤러 B을 테스트 할 때 서비스 A이 조롱되지 않았습니다.

내가 서비스 가입일 간접적 컨트롤러 B의 시험에 의해 호출되는 생각, 내가 잘못된 결과를 얻을.

아이디어가 있으십니까? 나는 옳은 것을 의심하고 있나? 이 부분에서 정확한 테스트 커버리지 결과를 얻을 수 있도록 주변에 어떤 방법이 있습니까?

미리 감사드립니다.

답변

3

불행하게도, 이것은 코드 커버리지를 평가하는 방법입니다. 코드가 실행되면 "덮여"있는 것으로 간주됩니다. 다행스럽게도 오탐 (false positive)을 줄이기 위해 할 수있는 일이 있습니다. 당신은 당신의 의존성을 조롱 할 수 있습니다!

대신 실제 서비스의 자스민 스파이 실행됩니다 다음 예 : http://plnkr.co/edit/x8gQQNsHT0R5n5iJSxKw?p=info

+0

당신이 답변을 주셔서 감사합니다 :

다음
describe('Controller Tests', function() { var $scope, mockServiceA; beforeEach(module('app', function($provide) { mockServiceA = jasmine.createSpyObj('mockServiceA', ['foo']); $provide.value('ServiceA', mockServiceA); })); beforeEach(inject(function($rootScope, $controller) { $scope = $rootScope.$new(); $controller('ControllerB', { $scope: $scope }); })); describe('ControllerB', function() { it('should call mock service', function() { expect(mockServiceA.foo).not.toHaveBeenCalled(); $scope.useServiceA(); expect(mockServiceA.foo).toHaveBeenCalled(); }); }); }); 

이 작업 Plunker입니다! 바위를 조롱! 그러나 때로는 의존성이 많은 복잡한 구성 요소를 조롱하는 것이 너무 힘듭니다. 코드 적용 범위 보고서를 평가하고 분석 할 때이를 염두에 두는 것이 좋습니다. – franleplant

+0

위에서 설명한 것처럼 서비스 조롱에 대한 또 다른 접근법은'spyOn() ..callFake()'입니다. 단위 테스트가 테스트하는 코드보다 조금 더 많은 작업을 수행한다는 것을 알았지 만 이는 안정성을 위해 지불 한 가격입니다. –

+0

고마워요! 관심있는 사람들을 위해, 이것은 스파이에 관한 Jasmine의 문서에 대한 링크입니다. http://jasmine.github.io/2.0/introduction.html#section-Spies – franleplant

관련 문제