繁体   English   中英

AngularJS / Karma - 测试函数返回已解决或拒绝的承诺

[英]AngularJS/Karma - Testing function returns promise that has been resolved or rejected

如果我的函数返回了一个被拒绝的承诺但是似乎无法在这个问题上找到任何令人惊讶的东西,那么尝试使用AngularMock在Karma中进行单元测试。

我有一个像UserService这样的服务,它有一个函数: processIdentityResponse ,它根据里面的逻辑返回一个被解析或被拒绝的promise:

processIdentityResponse: function(response)
{
    var deferred = $q.defer();
    if (response.data.banned) {
        deferred.reject(response);
    } else {
        deferred.resolve(response);
    }   
    return deferred.promise;
}

我想测试一下,如果被禁止的属性存在,则返回被拒绝的承诺,如果没有,则它被解决...我怎样才能实现这一点?

我试过以下这样的事情没有成功:

it('should return a rejected promise if status is a string', function() {
    var rejected = false;
    UserService.processIdentityResponse(data).catch(function() {
        rejected = true;
    });
    expect(rejected).toBe(true);
});

似乎原因是因为它的异步功能尚未解决。

你基本上需要$rootScope.$digest()之后如下:

it('should return a rejected promise if status is a string', inject(function($rootScope) {
    var rejected = false;
    UserService.processIdentityResponse(data).catch(function() {
        rejected = true;
    });
    $rootScope.$digest();
    expect(rejected).toBe(true);
}));

为了添加Dominic所说的,我使用了Jasimine done()异步支持功能。 将其视为暂停/等待功能。

describe('my description',function(){
 beforeEach(function(done){
  var rejected = true;
  var promise = UserService.processIdentityResponse(data);//add ur service or function that will return a promise here
  setTimeout(function(){done();},1500);//set time to 1500ms or more if it's a long request
 });

 it('it should be true',function(done){
  promise.catch(function(){ rejected=true});
  $rootScope.$digest();//important
  expect(rejected).toBeTruthy();
  done();
 });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM