角度控制器中使用DOM的测试功能

时间:2014-05-14 13:04:18

标签: javascript jquery angularjs dom jasmine

我们有一个AngularJS控制器来定义这个函数:

$scope.testMe = function() {
    return $('#test');
}

现在我们如何测试呢?

我们的尝试是这样的Karma测试:

    describe('testMe', function() {
        var scope, element, ctrl;
        var html = '<span id="test"></span>';

        beforeEach(module('theModule'));

        beforeEach(inject(function($rootScope, $compile, $controller) {
            scope = $rootScope.$new();
            ctrl = $controller('theCtrl', {$scope: scope});
            element = $compile(html)(scope);
        }));

        it('finds it', function() {
            var gotcha = scope.testMe();
            expect(gotcha.attr('id')).toBe('test');
        });
    });

...但它不起作用 - jQuery似乎在Karma生成的DOM中查找,而不是在我们在var html中定义的DOM ...

1 个答案:

答案 0 :(得分:2)

我不认为将您创建的元素附加到Karma的DOM中会导致任何问题。 你可以这样做:

$("body").append($compile(html)(scope));
scope.$digest(); 

如果您不想使用Karma的DOM,请尝试使用此问题中建议的html2js preprocessorLoad HTML files with Karma