34

要素が睾丸 (ジャスミン) で表示されているか非表示であるかを調べるにはどうすればよいですか?

私のDOMは次のようになります:

<div class="span5 value-entry">
    <input type="text" ng-model="query.value" placeholder="Enter value" class="input-large" ng-show="genericInput(criteria.attribute)">
    <select ng-model="query.value" ng-options="entry for entry in filteredValue(criteria.attribute)" class="input-medium" ng-show="!genericInput(criteria.attribute)">
        <option value="">-- Select Value --</option>.
    </select>
</div>

選択または入力ボックスのいずれかが表示されますが、両方は表示されません。(他の基準に基づいて)どの要素が表示されているかを確認したいのですが、コードを機能させる方法がわかりません。私は次のコードを書きました:

expect(element('.value-entry input').is(':visible')).toBe(true);

しかし、私はエラーが発生します:

TypeError: Object #<Object> has no method 'is'

入力が表示され、選択が同時に非表示になっている (またはその逆) かどうかを確認するにはどうすればよいですか?

編集:これはエンドツーエンドのテストであることをここに追加したいと思います

4

3 に答える 3

53

This behavior has changed in Angular 1.2 because of ng-animate.

The code for ngShow is:

var ngShowDirective = ['$animate', function($animate) {
  return function(scope, element, attr) {
    scope.$watch(attr.ngShow, function ngShowWatchAction(value){
      $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide');
    });
  };
}];

Which means that it will add/remove class ng-hide to hide/show the element.

Thus, as an example, the right way to test if the element is hidden would be:

expect(element.find('.value-entry input').hasClass('ng-hide')).toBe(true);
于 2013-10-10T09:58:32.733 に答える
14

あなたは近かった。ただし、可視性をテストする方法は次のとおりです。

expect(element('#some-id:visible').count()).toBe(1);
于 2013-04-23T19:39:28.043 に答える