angularjs - 当没有 $scope 强制摘要时,如何解决 AngularJS、Jasmine 2.0 中的 promise ?

标签 angularjs jasmine karma-runner karma-jasmine

看来是有 promise 的do not resolve in Angular/Jasmine tests unless you force a $scope.$digest() 。在我看来,这很愚蠢,但没关系,我在适用的情况下可以使用它( Controller )。

我现在所处的情况是我有一个服务,它不太关心应用程序中的任何范围,它所做的只是从服务器返回一些数据,但 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();
    });
  });
});

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

编辑:引用解决方案。显然,即使服务没有使用它,您也被迫注入(inject)并消化 $rootScope。

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

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

    $rootScope.$digest();
    done();
  }); 

最佳答案

您需要在测试中注入(inject) $rootScope 并在其上触发 $digest

关于angularjs - 当没有 $scope 强制摘要时,如何解决 AngularJS、Jasmine 2.0 中的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021031/

相关文章:

javascript - Angular UI 掩码删除占位符

javascript - AngularJS 的动态文件名显示 JSHint 错误

javascript - 如何从其字形中解码 html 杂项符号?

Cordova /PhoneGap TDD : How to use Jasmine and Karma to test mobile app?

angular - 某些 Protractor API 函数会导致错误

javascript - Angular 调用函数 ng-repeat

angularjs - 使用 Angular ui-grid 时的列标题换行

javascript - 使模块在 jasmine 通过 Resharper 测试的 Controller 中可用

javascript - Grunt、Cucumber、Protractor 测试意外失败

javascript - 无法使用 Karma 运行 Coverage