1

ディレクティブ テストに慣れるために、以下に示す簡単な例を作成しました。残念ながら、テストは失敗しており、リンク関数が呼び出されていないようです。このディレクティブは、アプリ内で使用すると機能します。

message属性をハードコーディングし、リンク関数内の条件を削除し、さらに $watch 内から属性セットを抽出しようとしましたが、テストはまだ失敗します。

このような他の投稿があり、その理由は $digest 呼び出しの欠如によるものでしたが、私はそれを持っていて、it仕様ブロックに移動しようとしました.

呼び出しを実行するconsole.log(elem[0].otherHTML)と、スコープバインディングが機能するようです

<wd-alert type="notice" message="O'Doole Rulz" class="ng-scope"></wd-alert>

私は何が欠けていますか?

alert.spec.js

"use strict";

describe('Alert Specs', function () {

  var scope, elem;

  beforeEach(module('myapp'));
  beforeEach(inject(function ($compile, $rootScope) {
    scope = $rootScope;
    scope.msg = "O'Doole Rulz";
    elem  = angular.element('<wd-alert type="notice" message="{{msg}}"></wd-alert>');
    $compile(elem)(scope);
    scope.$digest();
  }));

  it('shows the message', function () {
    expect(elem.text()).toContain("O'Doole Rulz");
  });

});

アラート.js

angular.module('myapp').directive('wdAlert', function() {
  return  {
    restrict: 'EA',
    replace: true,
    template: '<div></div>',
    link: function(scope, element, attrs) {
      attrs.$observe('message', function() {
        if (attrs.message) {
          element.text(attrs.message);
          element.addClass(attrs.type);
        }
      })
    }
  }

});
4

2 に答える 2

0

これを追加して、知りたい他の人のために答えを広げます。

bower 経由でサードパーティのディレクティブをインストールしました。アプリでは機能しましたが、テストが中断されました。

問題は、Grunt/Karma が index.html のスクリプトを読み取らないことです。代わりに、インストールされた各スクリプトをカルマに知らせる必要があります。

たとえば、ディレクティブ ngQuickDate (日付ピッカー) を使用しました。アプリの index.html に追加しましたが、karma.conf.js にも追加する必要がありました。

files: [
    ...
    'app/bower_components/ngQuickDate/dist/ng-quick-date.js'
]

上記の答えは、**ワイルドカードを使用して「すべてのサブディレクトリで再帰的に」を意味することにより、同じことを行います。

それが役立つことを願っています!

于 2013-12-30T16:48:21.767 に答える
0

問題は、ファイルを整理する方法の Karma 構成であることが判明しました。他の誰かのお尻を噛んだ場合に備えて、この質問はそのままにしておきます。

files: [
  ...,
  'spec_path/directives/*js'      // what I originally had
  'spec_path/directives/**/*.js'  // what I needed
]
于 2013-10-31T20:19:41.627 に答える