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

Int*_*lix 6 javascript angularjs karma-jasmine

如果我的函数返回了一个被拒绝的承诺但是似乎无法在这个问题上找到任何令人惊讶的东西,那么尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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);
});
Run Code Online (Sandbox Code Playgroud)

Int*_*lix 6

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

你基本上必须$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);
}));
Run Code Online (Sandbox Code Playgroud)