【问题标题】:Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调
【发布时间】:2016-04-21 23:03:12
【问题描述】:

我知道这个错误经常出现在问题中,但尽管我努力了,我还是没能解决我的问题。

我有一个从 Parse 获取一些类别的服务。这在运行我的测试时成功完成,但我收到标题中显示的错误。

我的代码如下:

ParseService.js

angular.module('starter').service('ParseService', ['$q', function ($q) {

  this.getAllCategories = function() {

    var deferred = $q.defer();

    var categories = [];

    var query = new Parse.Query("Category");

    query.find({

      success: function(results) {

        console.log('Succesfully queried Parse.');

        for (var i = 0; i < results.length; i++) {
          var result = results[i];
          categories.push(result.get("name"));
        }

        deferred.resolve(categories);

        console.log(categories);
      },

      error: function(error) {

        console.log('Error querying Parse.');

        console.log(error);

        deferred.reject(error);
      }

    });

    return deferred.promise;

  };

}]);

ParseServiceTest.js

describe('ParseService', function(){

  var service;

  beforeEach(function(){
    module('starter');
  });

  it ('should fetch Categories', function(done){

    beforeEach(inject(function(ParseService){
      service=ParseService;
    }));

    var promise = service.getAllCategories();

    promise.then(function(categories){
      expect(categories.length).toEqual(5);
      done();
    });

  });

});

现在控制台输出如下:

'Succesfully queried Parse.'
['Pets', 'Automobile', 'Social', 'Retail', 'Technology']

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

服务似乎成功返回了类别,但由于某种原因,done() 方法从未执行。

您可以忽略我不模拟对 Parse 的调用这一事实。我知道这不是最佳做法。

【问题讨论】:

    标签: angularjs jasmine angular-promise


    【解决方案1】:

    为了解决/拒绝测试中的 $q 承诺,您需要开始摘要循环。

    describe('ParseService', function() {
      var service;
      var $rootScope;
    
      beforeEach(module('starter'));
    
      beforeEach(inject(function(ParseService, _$rootScope_) {
        service = ParseService;
        $rootScope = _$rootScope_;
      }));
    
      it('should fetch Categories', function(done) {
        var promise = service.getAllCategories();
    
        promise.then(function(categories) {
          expect(categories.length).toEqual(5);
          done();
        });
        // run digest cycle to resolve $q promises
        $rootScope.$digest();
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2014-05-01
      • 2019-11-04
      相关资源
      最近更新 更多