2016-04-25 13 views
1

私はangular serviceをテストしたいと思います。実データでテストしたいと思っています - a.k.a(統合テスト)。私はジャスミンとカルマを使用しています。ここで統合テストAngularJS +カルマ+ジャスミン

は私のテストで:

describe('Trending Data Service', function() { 
    var value = 0, originalTimeout = 0; 
    var service, Enums, $httpBackend; 

    // initialize module 
    beforeEach(module('waterfall')); 

    // initialize services 
    beforeEach(inject(function ($injector) { 
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; 
    $httpBackend = $injector.get('$httpBackend'); 
    service = $injector.get("trendingService"); 
    Enums = $injector.get("Enums"); 
    spyOn(service, 'fetch').and.callThrough(); 
    })); 

    it('check if dependencies are defined', function() { 
    expect(service).toBeDefined(); 
    expect(Enums).toBeDefined(); 
    expect(service.categories).toBeDefined(); 
    expect(service.fetch).toBeDefined(); 
    }); 

    it('categories array should be defined within the service', function() { 
    expect(service.categories.length).toEqual(9); 
    expect(service.categories).toEqual(jasmine.any(Array)); 
    }); 

    // this test is alway fails... 
    it('fetch method should return initial result', function (done) { 
    var promise = service.fetch(Enums.socials.viewAll, false); 

    promise.then(function (result) { 
     done(); 
    }, function() { 
     expect(1).toBe(2); 
     done.fail('Error occured'); 
    }); 
    }); 
} 

これはエラーです: Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

私は幅広いソリューションを試してみましたが、私はこれで任意の成功を持っていません。

EDIT:/ 4月/ 2016年29

var trendingService = function ($q, $http) { 
    var deferred = $q.defer(); 
    var $this = this; 
    this.fetch = function (id) { 
     $http.get(url).then(function (result) { 
      deferred.resolve(result); 
     }).catch(function(err) { 
      deferred.reject(err); 
     }); 
     return deferred.promise; 
    } 
    return { 
     fetch: $this.fetch; 
    }; 
}; 

var Enums = { 
    Roles: { 
     Admin: 1, 
     User: 2, 
     NotRegistered: 0 
    } 
}; 

angular.module('').const('Enums', Enums); 

答えて

1

カルマが統合テストのためのものではありません。 module( 'waterfall')へのあなたの呼び出しは、実際にはすべての$ https呼び出しをモックするangular.mock.moduleへの参照です。

実データでテストするには、何らかのエンドツーエンドテストを使用する必要があります。私はhttp://angular.github.io/protractor/#/を提案する。

+0

ブラウザベースの回帰オートメーションスイートとテストについては、http://www.seleniumhq.org/をご覧ください。 –

+0

e2eを使わずに具体的なサービスをチェックしたい場合はどうすれば役に立ちますか?具体的なデータが縛られているかどうかはわかりません。具体的なサービス内の特定のロジックにデータがバインドされていることを知りたい。私はC#のテストのように。 – IamStalker