2016-11-22 6 views
0

"あなたは何をしていますか?"と私はテストしています。そうでなければ証明しようと努力しているにもかかわらず、見かけのクラスが存在する。クラスが存在しなくても、角度のあるhasClassがtrueを返します

コンテキスト:

参加者のリストが表示され、評価又はスコアリングすることができるそれぞれが。応募者の部門内では、関連する(カテゴリ別に)応募者がまとめて表示されます。要約された参加者の得点は、参加者自身が自分の部門を通じて評価されるまで表示されません。このテストはこの動作を検証します。

テスト:

it('related items are hidden until scored', function() { 

    expect(judgeService.entrants[2].rating.score).toBe(0); 

    var other = angular.element(element.find('.competition')[0]); 
    var score_container = other.find('div > div'); 
    expect(score_container.hasClass('ng-hide')).toBe(true); 

    judgeService.entrants[2].rating.score = 3; 
    scope.$digest(); 

    // We'll refer to this later 
    console.log('HTML: ' + other.html()); 
    console.log('CLASS: ' + score_container.attr('class')); 

    // failure here 
    expect(score_container.hasClass('ng-hide')).toBe(false); 
}); 

HTML:

 <div class="competition" 
      ng-repeat="other in item.related"> 
      <div> 
       {{ other.name }}<br/> 
       <!-- this becomes the div > div in the test --> 
       <score-block item="other" ng-show="other.rating.score"></score-block> 
      </div> 
     </div> 

出力:hasClass(

LOG: 'HTML: 
      <div class="ng-binding"> 
       Andres<br> 
       <div class="ng-isolate-scope" ng-class="{error: vm.error}" item="other" ng-show="other.rating.score"> 
[ skippy bits ]' 

LOG: 'CLASS: ng-isolate-scope' 

だから、ええ、クラスが..要素上に存在しないので、なぜ)それはだと思いますか?

のgit当たり【変更】

二分、テストが失敗開始させる変化は無関係指令でした。しかし、たとえ変更が直接関係していたとしても、hasClass()がクラスを不在として報告する方法は誰も見ていない。

更新:jqueryのコードを掘り

は、要素の子要素のいずれかがクラス」を持っている場合element.hasClassは(「foo」が)trueを返しますことが表示されます(hasClass()がインストールされている場合jqueryのを使用しています)たとえ要素自体がそうでなくても "foo"です。 WTF、jquery?

答えて

0

明らかに、これは、親要素からng-hideクラスを持つ子に再帰する 'div> div'セレクタが原因です。

修正:

var score_container = other.find('div > div').eq(0); 
関連する問題