web-dev-qa-db-ja.com

Angular and karma(jasmine):クラスによって要素を見つけるにはどうすればよいですか?

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);
    }

});

ディレクティブを単体テストしようとしていますが、クラスごとに要素を見つけることができません。

次のような要素を見つけられるようにしたいと思います。

var trigger == element.find('div.trigger') // doesn't find anything.

しかし、今はこのようにしかできません:

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

クラスごとに要素を見つけるにはどうすればよいですか?

18
Hudvoy

クラス名による検索は、AngularJS find関数ではサポートされていません。代わりに、これにバニラJavaScriptを使用できます。

var result = element[0].querySelectorAll('.findme');

これで、結果変数がfindmeのクラスかどうかを、angular要素でラップすることで確認できます。

angular.element(result).hasClass('findme')

Fiddle

14
Dieterg

これでうまくいくはずです。expect(element [0] .querySelectorAll( "div.trigger")。length).not.toBe(0);

1
Dr.Oblak