AngularJS/Karma-测试函数返回已解决或拒绝的promise
AngularJS/Karma - Testing function returns promise that has been resolved or rejected
如果我的函数返回了一个被拒绝的承诺,但似乎没有发现任何令人惊讶的事情,那么尝试使用AngularMock在Karma中进行单元测试。
我有一个类似UserService的服务,它有一个函数:processIdentityResponse
,它返回一个promise,该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);
});
原因似乎是由于promise是异步功能,所以尚未解决。
你基本上必须像这样$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();
});
});
相关文章:
- 简单的ES6承诺问题-交换解决和拒绝参数
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- 角度$q.拒绝不解决
- 在$http内解决/拒绝承诺是行不通的
- 拒绝并解决Q承诺
- 关于承诺/A+规范,是一个从未被允许解决或拒绝的承诺
- AngularJS/Karma-测试函数返回已解决或拒绝的promise
- 承诺-链接解决/拒绝
- 承诺不期望得到解决或拒绝
- 在自定义的Jasmine匹配器中解决和拒绝承诺
- 承诺API回调-如何正确解决或拒绝
- new Promise和Promise的区别.在bluebird中解决/拒绝
- 如何知道什么时候所有的承诺都被拒绝了,或者用基本的js承诺解决了
- 你是否应该在承诺中解决或拒绝后退货
- 我是否需要在早期解决/拒绝后返回?
- 麻烦的错误,未能拒绝与蓝鸟.解决得很好.错误似乎会使应用程序崩溃
- 问美元.当有一个被拒绝的承诺时,一切都解决了
- JavaScript承诺在未被拒绝或解决时是否会造成内存泄漏?
- 在外部回调中解决/拒绝承诺