Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何解决在AngularJS,Jasmine 2.0的promise,当没有$scope强制摘要?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
看起来promises do not resolve in Angular/Jasmine tests unless you force a $scope.$digest().这是愚蠢的IMO但很好,我有工作在适用(控制器)。

我现在的情况是我有一个服务,可以关心任何范围的应用程序,所有它从服务器返回一些数据,但promise似乎没有解决

app.service('myservice',function($q) {
  return {
    getSomething: function() {
      var deferred = $q.defer();
      deferred.resolve('test');
      return deferred.promise;
    }
  }
});
describe('Method: getSomething',function() {
  // In this case the expect()s are never executed
  it('should get something',function(donE) {
    var promise = myservice.getSomething();

    promise.then(function(resp) {
      expect(resp).toBe('test');      
      expect(1).toEqual(2);
    });

    done();
  });

  // This throws an error because done() is never called.
  // Error: Timeout - Async callBACk was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAl.
  it('should get something',function(donE) {
    var promise = myservice.getSomething();

    promise.then(function(resp) {
      expect(resp).toBe('test');      
      expect(1).toEqual(2);
      done();
    });
  });
});

测试此功能的正确方法是什么?

编辑:解决方案参。显然,你被迫注入和消化$ rootScope,即使服务没有使用它。

it('should get something',function($rootScope,donE) {
    var promise = myservice.getSomething();

    promise.then(function(resp) {
      expect(resp).toBe('test');      
    });

    $rootScope.$digest();
    done();
  });
您需要在测试中注入$ rootScope并触发$ digest。

大佬总结

以上是大佬教程为你收集整理的如何解决在AngularJS,Jasmine 2.0的promise,当没有$scope强制摘要?全部内容,希望文章能够帮你解决如何解决在AngularJS,Jasmine 2.0的promise,当没有$scope强制摘要?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。