簡體   English   中英

承諾在角茉莉單元測試中無法解決

[英]Promise not resolving in angular jasmine unit test

我的服務如下所示:

app.service('foo',function($q){
  this.fn3 = function(){
    var deferred = $q.defer();
    return deferred.promise;
  }
});

我的規格文件如下:

describe('Testing: MainCtrl', function() {
  var $scope = null;
  var ctrl = null;
  var mockfoo;
  var deferred;
  var $q;
  var data = {name: 'test'};
  var createController;

  beforeEach(module('plunker'));

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

    mockfoo = {
      fn3: function(){  }
    };

    deferred = $q.defer();
    spyOn(mockfoo,'fn3').and.returnValue(deferred.promise);

     createController = function() {
      return $controller('MainCtrl', {
        $scope: $scope,
        foo: mockfoo  
      });  
    };

  }));

  it('Should call fn3()', function(){
    ctrl = createController(); 
    deferred.resolve(data);
    $scope.$digest();
    expect(mockfoo.fn3).toHaveBeenCalled();
    expect($scope.temp).toBe(data);
  });

});

我不是很確定為什么該規范會失敗。 我正在解決承諾,然后調用$ digest,這意味着$ scope.temp應該得到一個值。

我在這里有一個plnkr: http ://plnkr.co/edit/uzWqTT

有任何建議嗎?

您必須通過訪問then函數中的值來捕獲已解析的值:

var resolvedValue;
$scope.temp.then(function(value) { resolvedValue = value; });
expect(resolvedValue).toEqual(data);

朋克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM