Services/Factoriesのテスト

2938 ワード

テストの目的
  • 独立したテストサービスで、バグとerrorを見つけます.
  • テストでは、stubbingがXHRリクエストを処理する必要はありません.

  • テストサービスは一番楽しいことです.ユニットテストやMidwayテストサービスでは、さまざまなポーズ(パラメータ、戻り値、異常など...)で遊ぶことができます.覚えておいてください.ユニットテストとMidwayテストはこの例でよく似ていますが、もしあなたのサービスにXHRリクエストがあれば、$httpサービスを使用して、それからこのリクエストを捕まえて中断して、Mockのシミュレーションデータで戻り値を書き直して、ユニットテストをより純粋にすることができますが、Midwayテストはそうしないでください.
    ユニットテスト
    <!-- lang: js -->
    //
    // test/unit/services/servicesSpec.js
    //
    describe("Unit: Testing Controllers", function() {
    
      beforeEach(module('App'));
    
      it('should contain an $appStorage service',
        inject(function($appStorage) {
    
        expect($appStorage).not.to.equal(null);
      }));
    
      it('should contain an $appYoutubeSearcher service',
        inject(function($appYoutubeSearcher) {
        expect($appYoutubeSearcher).not.to.equal(null);
      }));
    
      it('should have a working $appYoutubeSearcher service',
        inject(['$appYoutubeSearcher',function($yt) {
    
        expect($yt.prefixKey).not.to.equal(null);
        expect($yt.resize).not.to.equal(null);
        expect($yt.prepareImage).not.to.equal(null);
        expect($yt.getWatchedVideos).not.to.equal(null);
      }]));
    
      it('should have a working service that resizes dimensions',
        inject(['$appYoutubeSearcher',function($yt) {
    
        var w = 100;
        var h = 100;
        var mw = 50;
        var mh = 50;
        var sizes = $yt.resize(w,h,mw,mh);
        expect(sizes.length).to.equal(2);
        expect(sizes[0]).to.equal(50);
        expect(sizes[1]).to.equal(50);
      }]));
    
      it('should store and save data properly',
        inject(['$appStorage',function($storage) {
    
        var key = 'key', value = 'value';
        $storage.enableCaching();
        $storage.put(key, value);
        expect($storage.isPresent(key)).to.equal(true);
        expect($storage.get(key)).to.equal(value);
    
        $storage.erase(key);
        expect($storage.isPresent(key)).to.equal(false);
    
        $storage.put(key, value);
        $storage.flush();
        expect($storage.isPresent(key)).to.equal(false);
      }]));
    
    });
    

    Midwayテスト
    <!-- lang: js -->
    //
    // test/midway/services/servicesSpec.js
    //
    describe("Midway: Testing Services", function() {
    
      var tester;
      beforeEach(function() {
        if(tester) {
          tester.destroy();
        }
        tester = ngMidwayTester('App');
      });
    
      it('should perform a JSONP operation to youtube and fetch data', 
        function(done) {
    
        var $yt = tester.inject('$appYoutubeSearcher');
        expect($yt).not.to.equal(null);
    
        //this is the first video ever uploaded on youtube
        //so I doubt it will be removed anytime soon
        //and should be a good testing item
        var youtubeID = 'jNQXAC9IVRw';
    
        $yt.findVideo(youtubeID, false,
          function(q, data) {
            expect(data).not.to.equal(null);
            expect(data.id).to.equal(youtubeID);
            done();
          }
        );
      });
    
    });