2015-07-03 1 views
1

Написал простую директиву с событием click. Это выглядит так:elem.click не происходит в угловом модульном тесте?

var app = angular.module('plunker', []); 

app.directive('myDirective', 
    function() { 
    return { 
     restrict: 'E', 
     template: '<span ng-click="klik();">{{value}}</span>', 
     controller:function($scope) 
     { 
     $scope.klik= function() 
     { 
      $scope.value='you clicked on it!!'; 
     } 
     } 
    } 
    } 
); 

Я не могу вызвать событие щелчка, почему? Это тестовый модуль:

describe('testing directive', function(){ 
    var scope, html, elem, compiled; 

    beforeEach(function(){ 
    module('plunker'); 

    html = '<my-directive></my-directive>'; 

    inject(function($compile, $rootScope) { 
     //create the scope. 
     scope = $rootScope.$new(); 

     //get the element. 
     elem = angular.element(html); 

     //compile the view. 
     compiled = $compile(elem); 

     //run the view against the scope. 
     compiled(scope); 

     //call digest to update the view! 
     scope.$digest(); 
    }); 
    }); 

    it('should set text to "you clicked on it!"', function(){ 
    elem.click(); 
    expect(elem.value).toBe('you clicked on this!'); 
    }); 


}) 

Это ошибка:

TypeError: elem.click is not a function 

plunkr исх: http://plnkr.co/edit/e4Iood6Xm1qltOtIjo3Z?p=preview

ответ

0

Вы сделали несколько ошибок в plunkr. I fixed them here.

Вот что я сделал:

  1. Изменена диапазон кнопки в шаблоне (не необходимости, чтобы сделать это, но вы, как правило, нажмите на кнопках).
  2. Убедитесь, что тест нажимает кнопку , а не директиву.
  3. Извлечь первый элемент Jquery обернутый ответ на find метод
  4. вызова нажмите на кнопку
  5. Изменение ожидаемого текста.

Работы для меня сейчас.

+0

отличная, но ссылка plunkr, которую вы отправили, является старой? – Pindakaas

+0

Упс. Попробуйте следующее: http://plnkr.co/edit/OZnkbaP34p0IJBLRKLbe?p=streamer Также исправлен ответ. –