2015-02-02 3 views
2

현재 페이지의 메타 정보를 업데이트하는 서비스에 대한 테스트를 작성하고 있습니다.

mod.service('MetaSrv', ['$rootScope', '$rootElement', function ($rootScope, $rootElement){ 

return { 
    updateMetaTitle: function(contents) { 
     $rootScope.metaTitle = contents; 
    }, 
    updateMetaElement: function(type, contents) { 
     var metaEl = angular.element($rootElement.find('meta[name="'+ type +'"]')[0]); 
     metaEl.attr('content', contents); 
    } 
}; 
}]); 

이러한 각 기능을 시작점으로 테스트하고 싶습니다. 테스트는 다음과 같다 :

describe('sets', function() { 

    it('meta title element using $rootscope', function() { 
     MetaSrv.updateMetaTitle('Some Title'); 
     expect(scope.metaTitle).toBe('Some Title'); 
    }); 

    it('meta description element using $rootElement', function() { 
     MetaSrv.updateMetaElement('description', 'Some Description'); 
     var el = angular.element(rootElement.find('meta[name="description"]')[0]); 
     expect(el.attr('content')).toBe('Some Description'); 
    }); 
}); 

내가 두 번째 테스트에 대한 $rootElement에 액세스해야합니다 후 첫 번째 테스트에 대한 $rootScope를 사용할 수 있어야합니다. 설명 블록은 다음과 같습니다.

var MetaSrv, scope, rootElement, element; 

beforeEach(function() { 

    module('mod'); 

    inject(function (_MetaSrv_, $rootScope, $rootElement) { 
     MetaSrv = _MetaSrv_; 
     scope = $rootScope.$new(); 
     rootElement = $rootElement; 
    }); 
}); 

현재 첫 번째 테스트는 정상적으로 작동합니다. $rootElement을 사용하는 두 번째 테스트가 올바르게 작동하지 않으며 $rootElement에 메타 태그를 찾을 수 없습니다. 메타 정보 변경을 테스트하기 위해 $rootElement 의존성을 조롱하는 방법을 모르겠습니다. 이는 업데이트되는

답변

0

설명 :

var MetaSrv, scope, rootElement, element; 

element = '<div><title ng-bind-template="{{ metaTitle }}">Initial Title</title>'; 
element += '<meta name="description" content="Initial Description" /></div>'; 

beforeEach(function() { 

    module('mod'); 

    module(function($provide) { 
     $provide.value('$rootElement', angular.element(element)); 
    }); 

    inject(function (_MetaSrv_, $rootScope, $rootElement) { 
     MetaSrv = _MetaSrv_; 
     scope = $rootScope; 
     rootElement = $rootElement; 
    }); 
}); 

필요한 HTML을 포함하는 소자를 작성하고, $rootElement으로서 새로운 요소를 사용하는 공급자를 사용했다. 테스트에서는 이제이 새로운 $rootElement을 사용하여 메타 서비스를 업데이트하고 테스트에 필요한 값을 확인할 수 있습니다.

모든 테스트가 이제 예상대로 실행됩니다.