4

次のような約束ベースのサービスをテストしようとしています:

load : function(){
        var deferred = $q.defer();

        //Do misc async stuff
        deferred.resolve();

        return deferred.promise;
    }

Karma + Jasmine 2.0 でこれをテストしようとすると、done() コールバックを使用しようとしますが、常にタイムアウトし、約束を解決しません。

beforeEach(inject(function ($injector) {
    service = $injector.get('myService');
    $window = $injector.get("$window");
    $rootScope = $injector.get('$rootScope');
}));

describe('Call load', function () {
    it('resolves its promise', function (done) {
      service.load().then(function(){
          expect(something).not.toBe(undefined);
          done();
      });
    });
});

Jasmines docs から、非同期コードと一緒に done() を使用する必要がありますが、問題は約束が解決されないことです

4

1 に答える 1

0

コメントで @TimCastelijns が述べたように、$scope.$apply単体テストで約束を解決するために呼び出す必要があります。

load: function(){
    var deferred = $q.defer();

    setTimeout(function () {
        //Do misc async stuff
        deferred.resolve();
        $rootScope.$apply();
    });

    return deferred.promise;
}
于 2016-10-12T17:28:33.270 に答える