2014-06-23 3 views
0

RESTful 리소스에 대한 몇 가지 테스트를 작성하는 데 어려움을 겪고 있습니다. 나는 프레임 워크에 익숙하지 않으므로 설명을 적절하게 조정하십시오.주입 된 정수로 angularjs 리소스를 테스트하는 방법

단위 테스트를 위해 각도 모의 + 카르마 - 재스민을 사용하고 있습니다.

angular.module('resources', ['ngResource']) 
    .factory('Login', function($resource, helpers) { 
     return $resource(
     helpers.getApiUrl() + 'login' 
     ); 
    }) 

헬퍼 다른 모듈에 정의 된 상수 :

app = angular.module('app', ['ngRoute', 'filters', 'services', 'resources']).constant('helpers', { 
    getLanguage     : function() { return angular.element('meta[http-equiv]').attr('content'); }, 
    getApiUrl     : function() { return '<%= @site.config[:api] %>'.replace(/\%\{lang\}/,this.getLanguage() + '.'); } 
}).config(['$routeProvider', '$anchorScrollProvider', 'helpers', config]).run(runner) 

그리고 마지막으로, 여기에 문제가 단위 테스트입니다 :

describe("Resources test suite", function() { 

    var mockHelpers; 

    beforeEach(function(){ 
    mockHelpers = sinon.stub({ getLanguage: function() {return 'de';}, getApiUrl: function(){ return 'http://testApiUrl/';} }); 
    module('app', function($provide) { 
     $provide.constant('helpers', mockHelpers); 
    }) 
    }); 

    beforeEach(module('resources')); 

    describe('Login resource', function() { 

    it('should send a post resquest to /login', inject(function(Login, $httpBackend, helpers){ 
     var url = 'http://testApiUrl/login', 
      data = 'mock data', 
      headers = {"Accept": "application/json, text/plain, */*", "Content-Type":"application/json;charset=utf-8"}, 
      successCallback = jasmine.createSpy('success'), 
      errorCallback = jasmine.createSpy('error'); 
     $httpBackend.expectPOST(url, data, headers).respond(200, {token:'Oh yeah!'}); 
     var answer = Login.save(data); 
     $httpBackend.flush(); 
     expect(answer.token).toBe('Oh yeah!'); 
     expect(errorCallback).not.toHaveBeenCalled(); 
    })) 

    }) 

}); 

테스트 그리고 여기 REST 자원 테스트 개체입니다 실패하고 왜 그럴지 모릅니다.

Chrome 34.0.1847 (Linux) Resources test suite Login resource should send a post resquest to /login FAILED 
    Error: Unexpected request: POST undefinedlogin 
    Expected POST http://testApiUrl/login 

내가 여기에 붙어 : 모의 getApiUrl 기능 (카르마에서 여기에 콘솔 출력을) 정의되지 않은 것으로 보인다. 누군가가 잘못 될지도 모르는 생각이 있습니까? 나는 어떤 도움을 주셔서 감사하겠습니다.

+0

글쎄, 내가 문제가 보인다대로 sinon 스텁 내가 무엇을 기대하고 있지되었으며, sinon –

+0

확인에 있음을 발견했다. 누군가가 이유를 설명 할 수 있다면, 좋을 것입니다. 이제 테스트가 통과합니다. 모듈은 ('app', function ($ provide) { $를 제공합니다. .constant ('helpers', mockHelpers); }); }); –

답변

0

좋아, 스톤 스텁이 예상 한대로하지 못했습니다. 테스트는 지금 통과 :

beforeEach( 
    function() { 
     mockHelpers = { getApiUrl: function(){ return 'testApiUrl/';} }; 
     module('app',function($provide) {$provide.constant('helpers', mockHelpers);}); 
    } 
); 
관련 문제