0

伪造延迟承诺解决的示例测试:

describe('Example', function() {
  var $q;
  var $rootScope;
  var $scope;
  var $timeout;
  var fakePromise;

  beforeEach(inject(function (_$q_, _$rootScope_, _$timeout_) {
    $q = _$q_;
    $rootScope = _$rootScope_;
    $timeout = _$timeout_;
    $scope = $rootScope.$new();

    fakePromise = function (){
      return new Promise(function(resolve, reject){
        $timeout(function(){
          resolve('foo');
        }, 100);
      });
    };
  }));

  afterEach(function () {
    $scope.$apply();
  });

  it('should wait for promise to resolve and have a result', function(){
    return fakePromise().should.eventually.equal('foo'); //taken from chai-as-promised readme
  });

});

自述文件说要做:

return doSomethingAsync().should.eventually.equal("foo");

我得到的错误是:

Chrome 49.0.2623 (Mac OS X 10.11.4) Example should wait for promise to resolve and have a result FAILED
  Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
4

1 回答 1

0

$timeout服务已经返回了一个承诺。不需要制造一个。

fakePromise = $timeout(function() {return "foo"}, 100);

在此示例中,fakePromise设置为在 100 毫秒后解析为“foo”的承诺。

于 2016-04-07T00:25:08.697 回答