2016-12-05 4 views
0

Ich bin wirklich überrascht und weiß nicht, was los ist und was die Lösung sein könnte ... Ich teste mit diesem Stück Code. .then nie !:

describe('PicturesSvc.updatePicturesList', function() { 
    beforeEach(module('com.myapp')); 

    it('download and update pictures list', function (done) { 
     inject(function ($q, PicturesSvc, PicturesRemoteSvc) { 
      console.log($q); 
      var localPictures = []; 
      var remotePictures = [ 
       { 
        id: 'A', 
        likes: 2, 
       }, 
      ]; 

      $q(function (resolve, reject) { 
       console.log('going to resolve promise...'); 
       resolve(remotePictures); 
      }) 
       .then(function (val) { 
        console.log('Great! Promise has been resolved!', val); 
        done(); 
       }) 
       .catch(function (err) { 
        console.log('Something went wrong... :(', err); 
        done(err); 
       }); 

      var deferred = $q.defer(); 
      deferred.resolve('Test again!'); 
      deferred.promise 
       .then(function (result) { 
        console.log(result); 
       }); 
    }); 

}); 

Der Ausgang genannt wird, ist die folgende:

LOG: function Q(resolver) { ... } 
LOG: 'going to resolve promise...' 

    PicturesSvc.updatePicturesList 
    ✖ download and update pictures list 

Finished in 4.926 secs/5.01 secs 

SUMMARY: 
✔ 0 tests completed 
✖ 1 test failed 

FAILED TESTS: 
    PicturesSvc.updatePicturesList 
    ✖ download and update pictures list 
     PhantomJS 2.1.1 (Mac OS X 0.0.0) 
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 
+0

Versuchen Sie, den gesamten Konstruktor zu '$ q.resolve (remotePictures) zu vertauschen. Dann (...)' –

Antwort

2

in Angular um resolve ein Versprechen Sie auch $scope.$apply()

hier mehr anrufen müssen: https://docs.angularjs.org/guide/unit-testing#testing-promises

+0

Wie es ist Service, es kann auch mit '$ rootScope. $ apply()' :) getan werden https://docs.angularjs.org/api/ng/service/$q#testing – Miquel

+0

Gibt es eine Möglichkeit, Versprechen zu verketten? Jetzt habe ich erkannt, dass der zweite '.then' in einem Versprechen nicht aufgerufen wird (zuerst' .then' ist im Dienst, so dass es keinen Sinn macht, ein '$ rootScope. $ Apply() 'dort zu machen). – Miquel