2016-04-08 9 views
1

は私が(正常に動作)このディレクティブを書いた簡単な指示が、私はそれをテストし、トラブルを抱えている:テスト

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; 
     }); 
    } 
    }; 
}; 

を、私は200件の記事を読んで、失敗した後、正方形の1で、基本的です:

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

あなたがするトリングていますか?エラーはどこですか? – luk492

+1

テストに失敗しました、ごめんなさい – JLW

答えて

1

行うには、いくつかのものがあります:

  1. は、テスト範囲を作成します。
  2. ディレクティブをコンパイルします。それ以外の場合はテストできません。
  3. ngModel。$ parsers.pushを使用すると、相互作用をシミュレートするイベントをトリガーする必要があります。 triggerHandler('input')でトリガーできます。
  4. ダイジェストサイクルを手動で開始する必要があります。

    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'); 
        }); 
        }); 
    }); 
    

私はあなたのためのフィドルを作成:http://jsfiddle.net/trollr/q1vd1hqs/

関連する問題