我正试图测试一个parse.com支持的数据服务,但到目前为止还没有找到令人满意的解决方案。基本上,我想使用karma / jasmine来测试返回promise的函数。 我正在监视query.get()方法,以拦截并返回在jasmine规范的实现中创建的对象。但是,当间谍返回本地对象时,不会执行query.get options参数的成功路径。相反,待测试函数直接返回未解决的承诺,这不是我想要的。基本上,我想测试数据服务的成功路径(和错误路径)。
以下是代码:
angular.module('app.services',[])
.factory('AppServices',function(){
var doFunction1 = function(){
var promise = new Parse.Promise();
var ParseObjectClass = Parse.Object.extend('ParseObject');
var query = new Parse.Query(ParseObjectClass);
query.get('abc1234',{
success: function(result){
promise.resolve(result);
},
error: function(result, error){
promise.reject(error);
}
});
return promise;
}
return {
function1: doFunction1
}
});
describe('MyServices Tests', function() {
var AppServices;
var scope;
beforeEach(function() {
module('app.services');
});
beforeEach(inject(function($rootScope, AppServices) {
AppServices = AppServices;
scope = $rootScope.$new();
Parse.initialize("key1", "key2");
var user = new Parse.User({
id: 'abc1234',
});
var ParseObjectClass = Parse.Object.extend('ParseObject');
var obj1 = new ParseObjectClass({
id: 'xyc789'
});
spyOn(Parse.Query.prototype, 'get')
.and.callFake(function(options) {
return Parse.Promise.as(obj1);
});
}));
it('parseMockTest', function() {
var result = AppServices.function1(2);
console.log(JSON.stringify(result));
});
});
这是业力日志的结果:
LOG: '{"_resolved":false,"_rejected":false,"_resolvedCallbacks":[],"_rejectedCallbacks":[]}'
我原以为退回的承诺已经解决了。
关于如何测试返回承诺的函数的任何想法/提示?