测试AngularJS服务-模拟$rootElement和$rootScope

测试AngularJS服务-模拟$rootElement和$rootScope,angularjs,unit-testing,karma-jasmine,angular-services,Angularjs,Unit Testing,Karma Jasmine,Angular Services,我目前正在为更新页面上的元信息的服务编写一些测试 mod.service('MetaSrv', ['$rootScope', '$rootElement', function ($rootScope, $rootElement){ return { updateMetaTitle: function(contents) { $rootScope.metaTitle = contents; }, updateMetaElement: function(ty

我目前正在为更新页面上的元信息的服务编写一些测试

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');
    });
});
我需要能够在第一次测试中使用
$rootScope
,然后在第二次测试中需要访问
$rootElement
。描述块如下所示:

var MetaSrv, scope, rootElement, element;

beforeEach(function() {

    module('mod');

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

目前,第一个测试运行良好。使用
$rootElement
的第二个测试工作不正常,无法在
$rootElement
上找到元标记。我不确定如何模拟
$rootElement
依赖性以测试元信息更改。

这是更新的描述:

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;
    });
});
var-MetaSrv,scope,rootElement,element;
元素='初始标题';
元素+='';
beforeach(函数(){
模块(‘mod’);
模块(功能($提供){
$provide.value('$rootElement',angular.element(element));
});
注入(函数(_MetaSrv_u,$rootScope,$rootElement){
MetaSrv=_MetaSrv;
scope=$rootScope;
rootElement=$rootElement;
});
});
创建了包含所需html的元素,并使用提供程序将新元素用作
$rootElement
。测试现在使用这个新的
$rootElement
,它允许元服务更新和检查测试所需的值

所有测试现在都按预期运行