2016-04-08 16 views
1

ich diese Richtlinie schrieb (das funktioniert gut), aber ich habe Probleme, es zu testen:Testing eine einfache Richtlinie

module.exports = /*@ngInject*/ function($filter) { 
     return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, element, attrs, ngModel) { 
      ngModel.$parsers.push(function(value) { 
      var phoneNumber; 

     if (scope.country === 'US' && value.length >= 10) { 
      phoneNumber = value.replace(/[ &()-.]+/g, ''); 
      ngModel.$setViewValue(phoneNumber); 
      ngModel.$render(); 
     } else { 
      phoneNumber = value; 
     } 
     return phoneNumber; 
     }); 
    } 
    }; 
}; 

und ich bin im Grunde auf Platz 1 nach 200 Artikel zu lesen und andernfalls:

var factory = require('./us-phone.directive.js'); 
describe('US Phone Number directive', function() { 
    it('should remove dashes, parantheses, and spaces' , function() { 
    var value = '(555)555-5555'; 
    var phoneNumber = ''; 

    phoneNumber.should.equal('5555555555'); 
    }); 
}); 
+0

Was Sie tun Tring? Wo ist der Fehler? – luk492

+1

Der Test ist fehlgeschlagen, sorry, das war nicht mehr klar – JLW

Antwort

1

Es gibt mehrere Dinge zu tun:

  1. einen Testumfang erstellen.
  2. Kompilieren Sie Ihre Anweisung, sonst können Sie sie nicht testen.
  3. Sie verwenden ngModel. $ Parsers.push, also müssen Sie ein Ereignis auf Ihrem Element auslösen, das die Interaktion simuliert. Sie können es mit triggerHandler('input') auslösen.
  4. Sie müssen den Digest-Zyklus manuell starten.

    describe('myApp', function() { 
        var element; 
        beforeEach(function() { 
        module('myApp'); 
        }); 
    
        it('should replace special characters', function() { 
        element = angular.element('<input phone ng-model="value"/>'); 
        inject(function ($rootScope, $compile) { 
         var scope = $rootScope.$new(); 
         scope.value = '(555)-55 5555'; 
         var compiled = $compile(element)(scope); 
         compiled.val(scope.value); 
         compiled.triggerHandler('input'); 
         scope.$digest(); 
    
         expect(scope.value).toBe('555555555'); 
        }); 
        }); 
    }); 
    

ich eine Geige für Sie: http://jsfiddle.net/trollr/q1vd1hqs/