角度和业力(茉莉):我怎样才能按类找到元素

Hud*_*voy 18 jasmine angularjs angularjs-directive karma-runner

beforeEach(function () {

    html = '<div class="dropdown">'+
              '<div class="trigger" >trigger</div>'+
              '<div class="dropdown">body</div>'+
           '<div>';

    inject(function ($compile, $rootScope) {

        scope    = $rootScope.$new();
        element  = angular.element(html);
        compiled = $compile(element);

        compiled(scope);
        scope.$digest();

        // HERE NOT WORKING
        var trigger == element.find('div.trigger');
        var dropdown == element.find('.dropdown');

        // trigger and dropdown have both length 0

    });

    // Test doesn't pass
    it('should find the right element'), function () {
        expect(trigger.hasClass('trigger')).toBe(true);
    }

});
Run Code Online (Sandbox Code Playgroud)

我正在尝试对指令进行单元测试,但我无法逐个查找.

我希望能够找到类似以下内容的元素:

var trigger == element.find('div.trigger') // doesn't find anything.
Run Code Online (Sandbox Code Playgroud)

但现在我只能这样做:

var triggers = element.find('div') // return an array of length 2.
var trigger = triggers[0];
Run Code Online (Sandbox Code Playgroud)

我怎样才能按类找到元素?

Die*_*erg 14

AngularJS find函数不支持按类名查找.相反,您可以使用vanilla javascript:

var result = element[0].querySelectorAll('.findme');
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过将结果变量findme包装在角度元素中来检查结果变量是否具有类.

angular.element(result).hasClass('findme')
Run Code Online (Sandbox Code Playgroud)

小提琴

  • 为什么你需要在`querySelectorAll('.findme')`返回的东西上使用hasClass?它应该总是包含`findme`类,不应该吗? (2认同)