anglejs – 角度$q.when在Karma单元测试中未解决

前端之家收集整理的这篇文章主要介绍了anglejs – 角度$q.when在Karma单元测试中未解决前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用$q.when来绕过其他的lib承诺.
它的作用就像一个魅力,但是当我尝试在Karma中运行它时,即使我运行$digest,甚至在超时之后,promise也无法解决(done()).
以下是示例代码
describe('PouchDB',function () {
var $q,$rootScope;

beforeEach(inject(function (_$rootScope_,_$q_) {
    $rootScope = _$rootScope_;
    $q = _$q_;
}));

it("should run",function (done) {

    function getPromise() {
        var deferred = Q.defer();

        deferred.resolve(1);

        return deferred.promise;
    }

    $q.when(getPromise())
        .then(function () {
            done();   // this never runs
        });

    $rootScope.$digest();
});

为什么?这是什么原因?我真的不能得到它

更新(解决方法)

我不明白为什么$q.when没有在Karma解决 – 它有一些与nextTick功能,但我无法调试的问题.
相反,我抛开$q.when并且写了将PouchDB(或任何其他类似Q)转换为$q的简单函数

.factory('$utils',function ($q,$rootScope) {
  return {
    to$q: function (promise) {
      var deferred = $q.defer();

      promise.then(function (result) {
        deferred.resolve(result);
        $rootScope.$digest();
      });

      promise.catch(function (error) {
        deferred.reject(error);
        $rootScope.$digest();
      });

      return deferred.promise;
    }
  }
})
How to resolve $q.all promises in Jasmine unit tests?起,似乎诀窍是:
$rootScope.$apply();

我只有同样的问题,这对我有用在作出这一呼吁时,承诺得到解决.

原文链接:https://www.f2er.com/angularjs/140567.html

猜你在找的Angularjs相关文章