2016-08-03 44 views
1

有人可以帮我理解为什么这不起作用吗?我正在使用Jasmine的both函数来等待promise.then函数也被调用并发出一个断言。但它在被调用之前超时。

describe('greeting', function(){ 
    var greeting = 'hello'; 

    it('should call promise.then', function(done) { 
     inject(function ($q) { 
      var deferred = $q.defer(); 
      deferred.resolve(greeting); 

      deferred.promise.then(function (greeting) { 
       expect(greeting).toEqual('hello'); 
       done(); 
      }); 

     }); 
    }); 
}); 

then功能不被调用和Jasmine超时此消息:

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

回答

1

确保你做一个$scope.$apply触发角消化周期,就像这样:

inject(function ($q, $rootScope) { 
    var deferred = $q.defer(); 
    deferred.resolve(greeting); 

    deferred.promise.then(function (greeting) { 
     expect(greeting).toEqual('hello'); 
     done(); 
    }); 
    $rootScope.$apply(); 
}); 

应该解决问题

+0

谢谢!这解决了这个问题。 – 2achary