1

为了熟悉指令测试,我创建了如下所示的简单示例。不幸的是,测试失败了,似乎从未调用过链接函数。该指令在应用程序中使用时确实有效。

我已经尝试硬编码message属性,删除链接函数中的条件,甚至从 $watch 中提取 attr 集,但测试仍然失败。

还有其他类似的帖子,原因是缺少 $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

原来问题是我组织文件的方式的 Karma 配置。我会留下这个问题,以防它咬别人的屁股。

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

我正在添加这个以扩展其他任何想知道的人的答案。

我通过 bower 安装了第三方指令。它在应用程序中工作,但导致测试中断。

问题是 Grunt/Karma 没有读取 index.html 中的脚本。相反,您需要确保让 karma 知道每个已安装的脚本。

例如,我使用了指令 ngQuickDate(一个日期选择器)。我将它添加到应用程序的 index.html 中,但我还需要将它添加到 karma.conf.js 中:

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

上面的答案通过使用**通配符来表示“递归地在所有子目录中”来做同样的事情。

希望有帮助!

于 2013-12-30T16:48:21.767 回答