テストFilters

3257 ワード

テストの目的
  • ユニットでテストフィルタの入出力
  • をテストする.
  • scope範囲のDOMの総Html要素をテストして
  • を正しく処理する.
    AngularJSフィルタをテストするには、$injectorサービスを使用し、注入器から$filterサービスを取得し、ここからページに含めるサービスをすべてテストします.フィルタはすべての3つの方法でテストできますが、それぞれの方法が異なります.
    基本的には、フィルタをテストします.つまり、入出力(多くの場合、配列)を見たいと思っています.あなたのE 2 Eテストでは、フィルタがページに作用しているかどうかを確認します.
    ユニットテスト
    <!-- lang: js -->
    //
    // test/unit/filters/filtersSpec.js
    //
    describe("Unit: Testing Filters", function() {
    
      beforeEach(module('App'));
    
      it('should have a range filter', inject(function($filter) {
        expect($filter('range')).not.to.equal(null);
      }));
    
      it('should have a range filter that produces an array of numbers',
        inject(function($filter) {
    
        var range = $filter('range')([], 5);
        expect(range.length).to.equal(5);
        expect(range[0]).to.equal(0);
        expect(range[1]).to.equal(1);
        expect(range[2]).to.equal(2);
        expect(range[3]).to.equal(3);
        expect(range[4]).to.equal(4);
      }));
    
      it('should return null when nothing is set',
        inject(function($filter) {
    
        var range = $filter('range')();
        expect(range).to.equal(null);
      }));
    
      it('should return the input when no number is set',
        inject(function($filter) {
    
        var range, input = [1];
        range = $filter('range')(input);
        expect(range).to.equal(input);
    
        range = $filter('range')(input, 0);
        expect(range).to.equal(input);
    
        range = $filter('range')(input, -1);
        expect(range).to.equal(input);
    
        range = $filter('range')(input, 'Abc');
        expect(range).to.equal(input);
      }));
    
    });
    

    Midwayテスト:
    <!-- lang: js -->
    //
    // test/midway/filters/filtersSpec.js
    //
    describe("Midway: Testing Filters", function() {
    
      var tester;
      beforeEach(function() {
        tester = ngMidwayTester('App');
      });
    
      afterEach(function() {
        tester.destroy();
        tester = null;
      });
    
      it('should have a working range filter',
        function() {
    
        expect(tester.inject('$filter')('range')).not.to.equal(null);
      });
    
      it('should have a working filter that updates the DOM',
        function(done) {
    
        var id = 'temp-filter-test-element';
        var html = '<div id="' + id + '"><div class="repeated" ng-repeat="n in [] | range:10">...</div></div>';
        var element = angular.element(html);
    
        var scope = tester.rootScope().$new();
        tester.compile(element, scope);
    
        var elm = element[0];
        setTimeout(function() {
          var kids = elm.getElementsByTagName('div');
          expect(kids.length).to.equal(10);
          done();
        },1000);
      });
    
    });
    

    E 2 Eテスト:
    <!-- lang: js -->
    //
    // test/e2e/filters/filtersSpec.js
    //
    describe("E2E: Testing Filters", function() {
    
      beforeEach(function() {
        browser().navigateTo('/');
      });
    
      it('should have a filter that expands the stars properly', function() {
        browser().navigateTo('#/videos/zogrnQjHZAM');
        expect(repeater('#app-youtube-stars > .app-youtube-star').count()).toBeGreaterThan(0);
      });
    
    });