1

ディレクティブでいくつかのロジックを単体テストしたいと思います:

...
link: function ($scope, $element) {
   var rightMargin = 3;
   var w = $element.find('span')[0].scrollWidth;
   if (w > 100) {
      $element.css('width', (w + rightMargin) + 'px');
   }
...

$compile サービスは実際にはドキュメントに要素を追加しないため、scrollWidth は常に 0 を返します。私のユニットでは $element インスタンスにアクセスする方法がないため、$element.find 呼び出しの戻り値をスタブする方法がわかりません。テスト。

4

2 に答える 2

1

ページの HTML を body 内に直接設定してみてください

innerHTML の使用:

angular.element(document.body).html('<div class="my-elm" my-directive></div>');
var elm = angular.element(document.body.querySelector('.my-elm'));
$compile(elm)($rootScope);

または追加を使用:

var elm = angular.element('<div class="my-elm" my-directive></div>');
angular.element(document.body).append(elm);
$compile(elm)($rootScope);
于 2013-11-03T20:19:26.787 に答える