AngularJS测试指令,将replace设置为true

时间:2013-05-03 15:38:45

标签: angularjs unit-testing angularjs-directive

我的<custom-directive>replace:truetemplate: '<img />'。 我怎样才能为它编写单元测试?我想我想测试它实际上用img替换了custom-directive。

it('should be transformed to <img>', function(){
  var elm = $compile('<custom-directive></custom-directive>')(scope);
  scope.$digest();

  var t = elm.find('img'); // wrong! it replaces the element. it won't find another one inside
 //expect(elm).toBeAnImgElement ?
});

我找不到正确的匹配器。 我见过的最接近的案例是检查内容(elm.html()elm.text()),但我的标记为空。

2 个答案:

答案 0 :(得分:18)

将你的指令包装在一个div中,如:

describe('Directive: custom', function () {
  beforeEach(module('App'));

  var element, $scope;

  it('should be transformed to <img>', inject(function ($rootScope, $compile) {
    $scope = $rootScope.$new();
    element = angular.element('<div><custom-directive></custom-directive></div>');
    element = $compile(element)($scope);

    expect(element.children('img').length).toBe(1);
  }));
});

答案 1 :(得分:3)

您可以获取实际的HTMLElement对象并检查其标记名。使用elm[0]

获取实际的HTMLElement
expect(elm[0].tagName).toEqual('A');