В еще одном захватывающем выпуске «что вы делаете, tbm?», У меня есть тест, который (по общему признанию, проходил до [изменений], но сейчас) терпит неудачу из-за присутствующий кажущийся класс, несмотря на все попытки доказать обратное.Угловой hasClass возвращает true, даже если класс отсутствует
Контекст:
список участников показано, каждый из которых может быть оценен или насечки. Внутри абитуриента, связанные (по категориям) абитуриенты показаны в резюме. Суммарная оценка участника не отображается до тех пор, пока сам участник не будет оценен через свой собственный div. Этот тест проверяет это поведение.
Тест:
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>
Выход:
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'
Так что, да, класс не присутствует на элементе .. так почему hasClass () Думаете, это так?
[изменения]
Per мерзавца разрез`ать, изменение, которое вызвало тест, чтобы начать провал был в несвязанной директивы. Но даже если изменение было напрямую связано, я не вижу, как все, но hasClass() сообщают, что класс отсутствует.
Update:
Рытье через код JQuery (hasClass() использует JQuery, если он установлен), то оказывается, что element.hasClass («Foo») вернет истину, если какой-либо из дочерних элементов элемента имеет класс " foo ", даже если сам элемент отсутствует. WTF, jquery?