2017-03-14 2 views
0

Jasmine을 사용하여 AngularJs 서비스를 테스트하려고하지만 모든 종류의 오류가 계속 발생합니다. 그래서 테스트 할 수있는 아주 기본적인 Sum 서비스를 만들려고했는데 오류가 계속 발생했습니다. Jasmine/Chutzpah를 사용한 각도 서비스 테스트 오류

내가 시험에 노력하고있어 AngularJS와 서비스입니다 :

angular.module('base', []) 
    .service('operacoes', [function() { 
     this.somar = function (n1,n2) { 
      return n1 + n2; 
     }; 
    }]); 

그리고 내 시험 :

    : 다음과 같은 오류가 나를 반환이 테스트를 실행하려고

    /// <reference path="../../Scripts/angularjs/angular.min.js" /> 
    /// <reference path="../../Scripts/angularjs/angular-mocks.js" /> 
    /// <reference path="../../ServicoBase.js" /> 
    describe("Testing Services", function() { 
        var operacoesObj; 
    
        beforeEach(angular.module('base')); 
    
        beforeEach(inject(function (operacoes) { 
         operacoesObj = operacoes; 
        })); 
    
        it('deve ter inicializado', function() { 
         expect(operacoesObj).toBeDefined(); 
        }); 
    
        it('deve conseguir somar 2 números', function() { 
         expect(operacoesObj.somar(5, 1)).to.equal(6); 
        }); 
    }); 
    

  • TypeError : 개체가 'call'속성 또는 메서드를 지원하지 않습니다.
  • [$ injector : unpr] http://errors.angularjs.org/1.4.4/ $ injector/unpr? p0 = operacoesProvider % 20 % 3C- % 20operacoes
  • 정의되지 않은 것으로 예상됩니다.

2.4.1과 같은 다른 Jasmine 버전 (2.5.2에서 실행)을 사용해 보았습니다.

답변

2

테스트 서비스 테스트 컨트롤러와 동일하지 않습니다. 서비스의 인스턴스를 반환하려면 $injector.get()을 사용해야합니다. 나는 다음에 테스트 코드를 변경하고 테스트를 통과됩니다

describe("Testing Services", function() { 
    var svc; 

    beforeEach(function() { 
     angular.mock.module('base') 

     inject(function($injector) { 
      svc = $injector.get('operacoes'); 
     }) 
    });  

    it('deve ter inicializado', function() { 
     expect(svc).toBeDefined(); 
    }); 

    it('deve conseguir somar 2 números', function() { 
     expect(svc.somar(5, 1)).toEqual(6); 
    }); 
}); 

단위 테스트 서비스 here의 각도 설명서를 참조하십시오.

또한 서비스가 정의되어 있는지 확인하는 테스트가 필요하지 않습니다. 다른 단위 테스트가 실패한 경우 실패하게되므로 서비스가 정의되지 않았는지 알 수 있습니다.

+0

그랬습니다. 고마워요! – Diuter

0

이 시도 :

describe("Testing Services", function() { 
    beforeEach(module('base')); 

    it('deve ter inicializado', inject(function(operacoes) { 
    expect(operacoes).toBeDefined(); 
    })); 


    it('deve conseguir somar 2 números', inject(function(operacoes) { 

    expect(operacoes.somar(5, 1)).toEqual(6); 

    })) 

}); 
+0

동일한 오류입니다. 제 모듈의 이름이 'app'이 아닌 'base'입니다. @TehBeardedOne이 말한 것처럼 문제는 주입입니다. – Diuter

관련 문제